357、Java中級12 -【多線程 - 線程安全的類】 2020.06.26

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是線程安全的類,而ArrayList是非線程安全的。

4、把非線程安全的集合轉換爲線程安全

ArrayList是非線程安全的,換句話說,多個線程可以同時進入一個ArrayList對象的add方法

藉助Collections.synchronizedList,可以把ArrayList轉換爲線程安全的List。

與此類似的,還有HashSet,LinkedList,HashMap等等非線程安全的類,都通過工具類Collections轉換爲線程安全的

package multiplethread;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class TestThread {
    
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = Collections.synchronizedList(list1);
    }
        
}

5、參考鏈接

[01] How2j - 多線程 - 線程安全的類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章