arraylist、linkedlist、hashset、treeset、hashmap、treemap等都是執行緒不安全的,也就是說,當多個併發執行緒向這些集合中存、取元素時,就可能破壞這些集合的資料完整性。
如果程式中有多個執行緒可能訪問以上這些集合,就可以使用collection提供的類方法把這些集合包裝成執行緒安全的集合。
static collection synchronizedcollection(collection c): 返回指定collection對應的執行緒安全的collection.
static list synchronizedlist(list list): 返回指定list對應的執行緒安全的list物件.
static map synchronizedmap(map m): 返回指定map對應的執行緒安全的map物件.
static set synchronizedset(set s): 返回指定set對應的執行緒安全的set物件.
static sortedmap synchronizedsortedmap(sortedmap m): 返回指定sortedmap對應的執行緒安全的sortedmap物件.
static sortedset synchronizedsortedset(sortedset s): 返回指定sortedset對應的執行緒安全的sortedset物件.
//舉個例子
static list
socketlist = collections.synchronizedlist(new arraylist<>());
public
mapmap= collections.synchronizedmap(new hashmap());
以concurrent開頭的集合類,如concurrenthashmap、concurrentskiplistmap、concurrentskip listset、concurrentlinkedqueue和concurrentlinkeddeque。
以copyonwrite開頭的集合類,如copyonwritearraylist、copyonwritearrayset。
Java多執行緒理解 執行緒安全的集合物件
1 概念介紹 2 執行緒安全的集合物件 3 測試 3 原因分析 4 執行緒安全的集合並不安全 分析以下場景 synchronized map return value 由於執行緒安全的集合物件是基於單個方法的同步,所以即使map是執行緒安全的,也會產生不同步現象。在非單個方法的場景下,我們仍然需要使...
java執行緒學習
thread t new thread 這只是建立執行緒 t1.start 執行緒就緒狀態,執行緒還沒有執行,要等待cpu的呼叫 要是獲取到cpu的呼叫執行緒就開始執行,最終結束 遇到阻塞事件會進入阻塞狀態,阻塞狀態到就緒狀態,而不是執行狀態 執行緒分兩類 使用者執行緒和守護執行緒 使用者執行緒 執...
JAVA學習 執行緒
class exthread extends thread public void run public class threadaction class imthread implements runnable override public void run public class threa...