同步輔助類CountDownLatch

2021-09-01 21:23:48 字數 692 閱讀 1607

問題:前段時間寫乙個多執行緒的爬蟲程式,要求在所有爬蟲執行緒執行結束後,執行資料庫插入操作。所以就要知道那些爬蟲執行緒什麼時候能夠全部停止。

解決:(1)按照以往的我的寫法,我習慣用thread類的activecount()方法,這個方法能夠返回當前執行緒組裡活動執行緒的數量。比如我開5個執行緒,加上主線程一共是6個執行緒,所以只需要判斷activecount()為1時(只剩主線程),就說明其他執行緒都已執行完畢。

這種解決方法確實能解決一部分問題。但是當使用了一些開源框架時,比如hibernate,spring什麼的,就會發現activecount()是不可預知的,這是因為這些開源框架開了一些執行緒;而且在寫判斷是否爬蟲執行緒都關閉的條件時要加入硬編碼,所以這種解決方法就不是很好了。

(2)因為第一種解決方法有很多問題,所以我上網查了一下別人是怎麼解決的。後來發現有countdownlatch這個很有幫助的類。這是個同步輔助類。主要方法有三個:

public countdownlatch(int count); (構造方法)

首先,構造該類時,要傳入乙個int型的整數作為計數器初始值。

然後,我們可以在各個執行緒執行完畢時,呼叫countdown()方法,這個方法會把計數器減掉1。

最後,我們可以在主線程呼叫await(),這個方法都夠阻塞當前執行緒(這裡就是主線程),直到計數器的值減到0為止。

所以這個類給我們提供了乙個方便的檢測你想監測的執行緒是否執行完畢。

多執行緒同步輔助類

同步輔助類之訊號量 允許指定共享資源數量,可以允許指定數量的執行緒同時訪問資源 與同步的區別在於,同步時,一次只能乙個執行緒訪問資源 author administrator public class semaphoredemo catch interruptedexception e start ...

Java學習筆記 同步輔助類

countdownlatch乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。countdownlatch中兩個比較關鍵的方法 public void await throws interruptedexception 呼叫await 方法的執行緒會被掛起,它...

Java中的5種同步輔助類

概述 當你使用synchronized關鍵字的時候,是通過互斥器來保障線程安全以及對共享資源的同步訪問。執行緒間也經常需要更進一步的協調執行,來完成複雜的併發任務,比如wait notify模式就是一種在多執行緒環境下的協調執行機制。通過api來獲取和釋放鎖 使用互斥器 或者呼叫wait notif...