同步容器只是執行緒安全性更好一些,在**執行邏輯中並不一定是執行緒安全的。也就是同步容器本身是執行緒安全的,但是主要還是注意你的**邏輯。
一、非執行緒安全的集合對應的同步容器
vector實現了
list
介面,vector
裡面的方法都是用
sync
修飾過的。
stack也是同步容器,也是使用
sync
實現同步,繼承
vector
,裡面儲存的資料是先進後出。
hashtable實現了
map介面,裡面方法用
sync
修飾。二、vector
@slf4j
public class vectorexample1 catch (exception e)
countdownlatch.countdown();
});}
countdownlatch.await();
executorservice.shutdown();
log.info("size:{}", list.size());
}private static void update(int i)
}
執行可以看到,得到5000,vector是執行緒安全的。
但我們之前強調的**邏輯導致同步容器執行緒不安全是這樣的:
public class vectorexample2
thread thread1 = new thread() }};
thread thread2 = new thread() }};
thread1.start();
thread2.start();}}
}
比如同一時刻,執行緒1remove(9),而執行緒2get(9)就會出現陣列越界異常。
這就是同步容器裡面的兩個同步方法,因為操作順序的差異,不同的執行緒裡面出現執行緒不安全問題。
三、collection.synchronized***
synchronizedlist、
synchronizedset
、synchronizedmap
都會生成集合的同步容器。
@slf4j
public class setexample catch (exception e)
countdownlatch.countdown();
});}
countdownlatch.await();
executorservice.shutdown();
log.info("size:{}", set.size());
}private static void update(int i)
}
可以看到執行緒安全。 Java多執行緒之執行緒安全
當多個執行緒訪問某乙個類 物件或方法時 這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。public class mythread extends thread public static void main string args 結果如下 t1正在執行 4 t1正在執行...
JAVA多執行緒之 執行緒池
執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...
java多執行緒之執行緒的安全性 一
物件的狀態 物件的狀態是指儲存在狀態變數 例項或靜態域 中的資料。物件的狀態還可能包括其他依賴物件的域。例如,hashmap的狀態不僅儲存在物件本身,還儲存在map.entry物件中。多執行緒安全的概念 當多個執行緒訪問某個類時,不管執行時環境採用何種排程方式或者這些執行緒將如何交替執行,並且在主調...