執行緒安全的類相關
不安全的原因是因為共享變數被多個執行緒呼叫而出現數據錯亂
而前面講到的鎖就是讓其同步操作,同一時刻只有一個執行緒可以操作這個變數,達到資料的一致性和同步性。
步驟 1 :
HashMap和Hashtable的區別
HashMap和Hashtable都實現了Map介面,都是鍵值對儲存資料的方式
區別1:
HashMap可以存放 null
Hashtable不能存放null
區別2:
HashMap不是執行緒安全的類
Hashtable是執行緒安全的類
步驟 2 :
StringBuffer和StringBuilder的區別
StringBuffer 是執行緒安全的
StringBuilder 是非執行緒安全的
所以當進行大量字串拼接操作的時候,如果是單執行緒就用StringBuilder會更快些,如果是多執行緒,就需要用StringBuffer 保證資料的安全性
非執行緒安全的為什麼會比執行緒安全的 快? 因為不需要同步嘛,省略了些時間
步驟 3 :
ArrayList和Vector的區別
通過在eclipse中檢視原始碼可以得知:
ArrayList類的宣告:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Vector類的宣告:
public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
一模一樣的~
他們的區別也在於,Vector是執行緒安全的類
————————————————————————————————————————————————————————
Collections.synchronizedList(),可以將arraylist轉換為線性安全的list
public
class
TestThread {
public
static
void
main(String[] args) {
List<Integer> list1 =
new
ArrayList<>();
List<Integer> list2 = Collections.synchronizedList(list1);
}