多執行緒
核心執行緒size先是5,等佇列滿200後,核心執行緒擴大到10,佇列數量變為195
countdownlatch計數器
countdownlatch是通過乙個計數器來實現的,計數器的初始值為執行緒的數量。每當乙個執行緒完成了自己的任務後,計數器的值就會減1。當計數器值到達0時,它表示所有的執行緒已經完成了任務,然後在閉鎖上等待的執行緒就可以恢復執行任務。
每個執行緒呼叫 countdownlatch.countdown()方法,在多執行緒開始的地方用countdownlatch.await()
構造器中的計數值(count)實際上就是閉鎖需要等待的執行緒數量。這個值只能被設定一次,而且countdownlatch沒有提供任何機制去重新設定這個計數值。與countdownlatch的第一次互動是主線程等待其他執行緒。主線程必須在啟動其他執行緒後立即呼叫countdownlatch.await()方法。這樣主線程的操作就會在這個方法上阻塞,直到其他執行緒完成各自的任務。
其他n 個執行緒必須引用閉鎖物件,因為他們需要通知countdownlatch物件,他們已經完成了各自的任務。這種通知機制是通過 countdownlatch.countdown()方法來完成的;每呼叫一次這個方法,在建構函式中初始化的count值就減1。所以當n個執行緒都調 用了這個方法,count的值等於0,然後主線程就能通過await()方法,恢復執行自己的任務。
案例: 從資料庫一次拿100 條資料,放到池子裡執行,然後繼續拿,不管任務是否執行完,造成池子中任務的堆積,開始拒絕,這時使用countdownlatch,等到池子中的100 條資料執行完再查100條
countdownlatch countdownlatch = new countdownlatch(accounts.size());countdownlatch.await();
池子中this.countdownlatch = countdownlatch;countdownlatch.countdown();
參考:
countdownlatch和join的區別:
多執行緒學習
thread和runnable的區別 單繼承模式thread 而 runnable是介面 start 和run的區別 start是乙個執行緒只能啟動,run可以執行多次,並且run是呼叫當前正在執行的執行緒 wait notify object物件所具有的 sleep setpriority 同步機...
多執行緒學習
用 編輯 的多執行緒時用gcc threadtest 1.c 編譯時 一直報錯,報錯如下 tmp ccgko5iu.o 在函式 thread create 中 threadtest 1.c text 0x13b 對 pthread create 未定義的引用 threadtest 1.c text ...
多執行緒學習
簡單學習多執行緒。建立多執行緒有兩種方法。一 繼承thread類。多執行緒練習,通過繼承thread public class testthread extends thread public static void main string argsd 二 實現runnable介面。多執行緒練習。通...