標籤:skiplist object類 發包 join 死結 操作 tle cto 無鎖
一、並行世界
摩爾定律的失效,2004年秋季,Intel宣布徹底取消4GHz計劃,CPU向多核心的發展,頂級電腦科學家唐納德丶爾文丶克努斯評價:在我看來,這種現象(並發)或多或少是由於硬體設計者已經無計可施導致的,他們將摩爾定律失效的責任推脫給軟體開發人員。
1、幾個概念
同步和非同步:
並發與並行:都表示多個任務同時執行,但並發偏重於多個任務交替執行。
臨界區:即共用的資料
阻塞和非阻塞:
死結、饑餓和活鎖:死結為互不讓行,饑餓為一直拿不到資源,活鎖為一直撞到
2、並發層級
由於臨界區的存在,多線程之間的並發必須得到控制。根據控制的並發策略,分為阻塞、無饑餓,無障礙,無鎖,無等待 5種
3、Java語言相關:JMM(Java記憶體模型)
JMM中的關鍵技術點都是圍繞著多線程的原子性、可見度和有序性來建立的
(1)、原子性:操作不可中斷
(2)、可見度:當一個線程修改了某個共用變數的值時,其他線程是否立即知道這個修改。
(3)、有序性:程式執行時,可能會進行指令的重排來達到最佳化效果,但在多線程中,由於線程的相互影響,重新排序的線程會打亂其他的線程的執行結果。
二、Java並行 1、進程與線程
進程是電腦中的程式關於某資料集合上的一次運動活動,是系統進行資源分派的基本單位。進程是程式的基本執行實體,進程是線程的容器。
2、線程的狀態轉換
Thead類方法:start() 開啟線程,run()線程執行實體,sleep() 睡眠線程不會釋放資源,yield() 讓出CPU,join() 等待線程運行結束,suspend() 掛起,resume() 重啟
Object類方法:wait() 釋放對象監聽器,線程進入阻塞狀態;notify() 隨機喚醒一個,notifyAll() 喚醒所有。wait,notify,notifyAll 要在Synchronize同步塊中出現,因為其也會出現並發問題
3、volatile
volatile關鍵字告訴虛擬機器要主要不要隨意變動最佳化目標指令,對JMM中有序性。但通過volatile是無法保證原子性操作的。
三、Java並發包
0、並發集合簡介
ConcurrentHashMap:高效並發HashMap,安全執行緒
CopyOnWriteArrayList:在讀多寫少的場合,這個List效能非常好,遠遠浩宇Vector,都是安全執行緒
ConcurrentLinkedQueue:高效並發隊列,使用鏈表實現安全執行緒
BlockingQueue:一個JDK內部通過鏈表、數組等實現的阻塞 介面
ConcurrentSkipListMap:跳錶的實現,這是一個Map,使用跳錶的資料結構進行快速尋找
1、BlockingQueue
此介面是一個安全執行緒的 存取執行個體的隊列。使用情境
BlockingQueue通常用於一個線程生產對象,而另外一個線程消費這些對象的情境。
2、HashMap、HashTable、ConcurrentHashMap對比
HashMap 線程不安全,HashTable,ConcurrentHashMap安全執行緒
ConcurrentHashMap 採用鎖分段技術比HashTable更加高效
四、並行模式與演算法 1、單例模式 2、不變模式 3、生產者消費者 4、Future模式
。。。。
Java高並發程式設計