一: 同步容器都是執行緒安全的
如vector 和 hashtable ,collections.synchronized 實現執行緒安全的是通過,將它們的狀態封裝起來,並對每個公有方法都進行同步。但在一些復合操作時,還是要加鎖來保護復合操作。在容器在迭代過程中被修改時,會拋異常
二: 併發容器可以改進一下同步容器的效能: 因為併發容器增加了對一些常見復合操作的支援,迭代器都沒有加鎖。
1、concurrentmap , copyonwritearraylist
2、jdk 1.5 新增容器 :queue、blockingqueue
三:concurrentmap
優點1、並不是將每個方法都在同乙個鎖上同步並使得每次只能有乙個執行緒訪問容器,而是使用一種粒度更細的加鎖機制來實現。
2、提供的迭代器不會拋異常,不需要在迭代過程中加鎖。
缺點沒有實現對map加鎖以提供獨佔訪問
四、copyonwritearraylist
每次修改時,都會建立並重新發布乙個副本
五、阻塞佇列和生產者與消費者模式
六、阻塞方法與中斷方法
1、阻塞: 等待獲得乙個鎖,等待從thread.sleep方法中醒來,等待另乙個執行緒的計算結果時,都可能會阻塞。wait 會釋放鎖,但sleep不會釋放鎖。
2、當中斷時,會拋interruptedexception異常 ,可以呼叫thread.currentthread().interrupt()方法,恢復中斷狀態
七、同步工具類
1、countdownlacth (閉鎖)
2、futuretask
3、semaphore(訊號量)需要拿到許可
Java併發容器
同步容器將所有容器狀態的訪問都序列化,以實現執行緒安全性。這種方式的代價會嚴重降低併發性,多個執行緒競爭容器的鎖時,吞吐量將嚴重降低。併發容器是針對多個執行緒併發訪問設計的。通過併發容器來代替同步容器,可以極大地提高伸縮性並降低風險。與hashmap一樣,concurrenhashmap也是乙個基於...
java併發程式設計容器
1.concurrenthashmap 雖然hashtable執行緒安全,但是多執行緒訪問 時同一時間只能有乙個執行緒訪問,效率不高,concurrenthashmap引入了乙個 分段鎖 的概念,具體可以理解為把乙個大的map拆分成n個小的hashtable,根據key.hashcode 來決定把k...
Java多執行緒之同步容器與併發容器
vector hashtable collections.synchronziedxx 基於hashtable,段segement,最大16個 把粒度分細,每個段有自己的鎖 共享變數用volatile關鍵字,第一時間獲得修改資料。從主記憶體讀取,不從工作記憶體讀取 jdk有兩種cow容器 copyo...