1. 程式人生 > >java併發包&併發佇列

java併發包&併發佇列

1.什麼是執行緒安全問題?保證在多個執行緒之間共享同一個全域性變數或者靜態變數,保證資料的一致
性,和原子性。2.執行緒同步有哪些方式?
synchronized,lock3.執行緒同步提高了效率?降低程式效率,阻塞,搶鎖資源,效率不高。
Java併發包
原子類,Lock,併發包。
併發類。4.你們接觸過哪些執行緒安全的類?
Vector與Array List區別?
實現原理都是通過陣列實現-查詢速度塊,增加,修改,刪除速度慢。
區別:執行緒安全問題?Vector是安全的(上鎖的集合),ArrayList是執行緒不安全的。ArrayList效率高。HashTable與HashMap區別?
HashTable執行緒是安全的。
HashMap是執行緒不安全的。連結串列+陣列 put hashcode取模得到下表位置 一致性取模演算法。
證明執行緒安全
檢視原始碼put方法。Hashtable的get方法是執行緒安全?
讀--不需要?
原始碼加了。在同一時刻,只能讓一個執行緒去讀。Collections.synchronized*(m)
將執行緒不安全的集合轉換成執行緒安全的集合。怎麼對Java集合排序?
Collections,sort();jdk1.5之後 產生好多Java併發包
Hashtable執行緒安全的,效率非常低,鎖的資源競爭。
多執行緒共享同一個HashTable  加鎖,影響效率
每次只能有一個執行緒去操作hashtable。發明一種新的併發包。
ConcurrentHashMap
分段鎖--怎麼分段。16段
將一個整體拆分成多個小的hashTable()
預設分為16段。也就是最高支援16個執行緒的併發修改操作。
並且程式碼中大多共享變數使用volatile關鍵字宣告,目的是
第一時間獲取修改的內容,效能非常好。多個執行緒沒有用同一把鎖。
分段鎖計算。
只要保證執行緒安全問題,需要用ConcurrentHashMap:效率高。

CountDownLatch:實現類似計數器的功能。
jdk1.5的併發包。

CyclicBarrier:
計數用的,當執行緒達到一定數量時,並行執行。
Semaphore:計數的訊號量

併發佇列:
佇列:多個執行緒共享資料
在併發佇列 有界和無界區別在於一個支援有限制,一個無限制。
阻塞佇列和非阻塞佇列區別?
生產者寫入滿的時候,就會進入到阻塞。
當佇列為空的時候,消費者也會等待。ConcurrentLinkedDeque:適用高併發場景下的佇列。
效能好於BlookingQueue
基於連結節點的無界執行緒安全佇列。該佇列的元素遵循先進先出的原則
該佇列不允許null元素。BlockingQueue
阻塞佇列,有界
常用於生產者消費者場景,阻塞佇列就是生產者存放元素的容器
而消費者也是從容器中拿元素。阻塞佇列是執行緒安全的。