1. 程式人生 > >java高階執行緒之簡單類概要

java高階執行緒之簡單類概要

這個大家可以瞭解下,如果有需要測試程式碼的,可以下嗎留言

建立執行緒的兩種傳統方式
1、在Thread子類覆蓋的run方法中編寫執行程式碼
   涉及一個以往知識點:能否在run方法宣告上丟擲InterruptedException異常,以便省略run方法內部對Thread.sleep()語句的try...catch處理?
2、在傳遞給Thread物件的Runnable物件的run方法中編寫程式碼
總結:檢視Thread物件的run()方法的原始碼,可以看到其實這兩種方式都是在呼叫Thread物件的run方法,如果Thread類的run方法沒有被覆蓋,並且為該Thread物件設定了一個Runnable物件,該run方法會呼叫Runnable物件的run方法


callable and future
Future取得的結果型別和Callable返回的結果型別必須一致,這是通過泛型來實現的。
Callable要採用ExecutorSevice的submit方法提交,返回的future物件可以取消任務。

Lock&Condition實現執行緒同步通訊
Lock比傳統執行緒模型的synchronized方式更加面向物件,與生活中的所類似,鎖本身也應該是一個物件。兩個執行緒執行的程式碼片段要實現同步互斥的效果,它們必須用同一個Lock物件。鎖是上在代表要操作的資源的類的內部方法中
而不是執行緒程式碼中!
讀寫鎖:分為讀鎖和寫鎖,多個讀鎖不互斥,讀鎖與寫鎖互斥,寫鎖與寫鎖互斥,這是由jvm自己控制的,你只要上好相應的鎖即可。

Semaphore實現訊號燈
Semaphore可以維護當前訪問自身的執行緒個數,並提供了同步機制。使用Semaphore可以控制同時訪問資源的執行緒個數
,例如實現一個檔案執行的併發訪問數。

CyclicBarrier
表示大家彼此等待,大家集合好後才開始出發,分散活動後又在指定地點集合碰面。
CountDownLatch
猶如倒計時計數器,呼叫CountDownLatch物件的countDown方法就將計數器減1,當計數器到達0時,則所有
等待者或單個等待者開始執行。

Exchanger:用於實現兩個人之間的資料交換,每個人在完成一定的事務後想與對方交換資料,第一個先拿出資料的人講一直等待
第二個人拿著資料到來時,才能彼此交換資料。

可阻塞的佇列
佇列包含固定長度的佇列和不固定長度的佇列
ArrayBlockingQueue
只有put方法和take方法才具有阻塞功能