2015-11-24 186 views
-2

我在數組中有幾個線程。 所有線程都在LinkedBlockingQueue上運行。 每個線程從隊列中獲取一個元素(這是一個文件名),讀取它的依賴關係(簡單I/O)並將這些依賴關係添加到隊列中,以便我們也可以獲得它們的依賴關係。在某個時候,隊列將是空的(當我們發現所有的依賴關係時)。問題是,如何檢查所有線程是否正在等待隊列中的元素,如果是,我如何終止它們? 我通過使用方法poll(long timeout,TimeUnit unit)「破解」它的工作,但我想從主方法終止它們。Java線程終止

編輯: 我不能在隊列爲空的情況下終止,因爲一開始我們可能只有一個文件在隊列中,而當一個線程正在處理它時,這個隊列是空的一段時間,直到新依賴關係被發現。

預先感謝您。

+0

請給我們一些代碼。不明白爲什麼線程無法檢測到隊列是空的,然後終止? –

回答

1

這是一個想法:有一個原子整數計算「失去工作」的線程數。一旦主計算機通知該計數器達到數組N的長度,就讓它將N個特殊元素放入隊列中,當線程獲得該元素時,會使其結束。

+0

不錯的想法,但不是隻等待抓取結束而綁定一個線程,爲什麼不讓最後一個工人進入失去工作狀態發送關閉信號? –

+0

@jameslarge絕對。有很多可能性...... –