Java併發程式設計的藝術
volatile:在多處理器的開發中保證了共享變數的“可見性”。一個執行緒改了一個變數,別的執行緒能馬上讀取到改之後的值。
synchonized:
對於普通同步方法,鎖是當前例項物件。
對於靜態同步方法,鎖是當前類的Class物件。
對於同步程式碼塊,鎖是括號裡的物件。
六、Java併發容器和框架
1、ConcurrentHashMap:執行緒安全且高效的HashMap
HashMap在併發執行put操作時會引起死迴圈。
HashTable使用synchonized來保證執行緒安全,效率低。
2、ConcurrentLinkedQueue:執行緒安全的佇列
非阻塞佇列。
3、BlockingQueue:阻塞佇列
有界佇列,元素滿時,想放入元素會阻塞;元素空時,想取出元素也會阻塞。
實現有:
ArrayBlockingQueue:陣列實現的有界阻塞佇列
LinkedBlockingQueue:連結串列實現的有界阻塞佇列
ProirityBlockingQueue:支援優先順序排序的無界阻塞佇列
等共7個
4、Fork、Join框架
Fork就是把一個大任務分為若干子任務並行執行;
Join就是合併這些子任務的執行結果。
八、Java中的併發工具類
1、CountDownLatch:允許等待其他執行緒完成操作
核心方法:
CountDownLatch(int) 計數器初始值
countDown( )計數器減一
await( ) 等待計數器為0,才往下執行
2、CyclicBarrier:同步屏障
讓一組執行緒到達一個屏障時被阻塞;直到最後一個執行緒到達屏障時,屏障才會開門,所有被攔截的執行緒才會繼續執行。
核心方法:
CyclicBarrier(int, Runnable),引數1表示屏障開門的執行緒數要求;引數2為屏障開門時先執行的執行緒,之後才執行被攔截的執行緒。
await( ),攔截執行緒,等待屏障開門
3、Semaphore:訊號量
Semaphore用來控制同時訪問特定資源的執行緒數量。
核心方法:
Semaphore(int),引數為資源數
acquire( ),請求資源,沒獲取到資源時,執行緒阻塞。
release( ),釋放資源
4、Exchanger:執行緒間交換資料
它提供一個同步點,在這個同步點,兩個執行緒可以交換彼此的資料。
核心方法:
exchange(T)
如果兩個執行緒有一個沒有執行exchange(T)方法,則會一直等待。有過載的方法,能夠設定超時時間。
十、Executor
FixedThreadPool:固定執行緒數的執行緒池
SingleThreadExecutor:單執行緒數的執行緒池
CachedThreadPool:根據需要建立新執行緒的執行緒池
ScheduledThreadPoolExecutor:週期執行各種任務
Future介面表示非同步計算的結果。FutureTask除了實現Future介面外,還實現了Runnable介面。因此,FutureTask可以交給Executor執行。
相關文章
- Java併發程式設計藝術Java程式設計
- 《java併發程式設計的藝術》併發工具類Java程式設計
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- Java併發程式設計的藝術,解讀併發程式設計的優缺點Java程式設計
- 《java併發程式設計的藝術》原子操作類Java程式設計
- Java併發程式設計的藝術(五)——中斷Java程式設計
- 《java併發程式設計的藝術》併發底層實現原理Java程式設計
- 《java併發程式設計的藝術》記憶體模型Java程式設計記憶體模型
- 《java併發程式設計的藝術》執行緒池Java程式設計執行緒
- 【讀書筆記】Java併發程式設計的藝術筆記Java程式設計
- 如何評價《Java 併發程式設計藝術》這本書?Java程式設計
- java併發程式設計系列:java併發程式設計背景知識Java程式設計
- 【Java併發程式設計的藝術】第二章讀書筆記之原子操作Java程式設計筆記
- java 併發程式設計Java程式設計
- Java併發程式設計Java程式設計
- Java併發程式設計---java規範與模式下的併發程式設計1.1Java程式設計模式
- Java併發程式設計 - 第十一章 Java併發程式設計實踐Java程式設計
- Java併發程式設計藝術第二章-----第二遍讀後記錄Java程式設計
- Java併發程式設計—ThreadLocalJava程式設計thread
- Java併發程式設計:synchronizedJava程式設計synchronized
- Java併發程式設計 -- ThreadLocalJava程式設計thread
- Java併發程式設計 -- ConditionJava程式設計
- Java併發程式設計——ThreadLocalJava程式設計thread
- java-併發程式設計Java程式設計
- Java 併發程式設計解析Java程式設計
- Java併發程式設計-CASJava程式設計
- Java併發程式設計:LockJava程式設計
- Java併發程式設計ForkJoin的DemoJava程式設計
- Java併發程式設計-鎖及併發容器Java程式設計
- 深入理解併發程式設計藝術之計算機記憶體模型程式設計計算機記憶體模型
- Java併發程式設計之synchronizedJava程式設計synchronized
- Java併發程式設計實踐Java程式設計
- Java併發程式設計基礎Java程式設計
- Java 併發程式設計 Executor 框架Java程式設計框架
- Java 併發程式設計要點Java程式設計
- Redux中的程式設計藝術Redux程式設計
- Michael Feathers:程式設計的藝術程式設計
- 【Java併發程式設計】一、為什麼需要學習併發程式設計?Java程式設計