2011-11-17 80 views
1

我正在使用TimerTask來運行一些週期性任務,任務正在處理一組文件。我有一個要求,如果要處理的文件數量超過預定的限制,線程將暫停執行並等待下一個週期再次開始處理文件。有沒有辦法暫停TimerTask直到下一個執行週期,還是我必須擴展TimerTask類來實現此功能?我看到有一個TimerTask.cancel方法,但是這將取消該線程的所有進一步執行。我不希望發生這種情況。我只是想讓線程暫停,直到下一個執行階段。因爲我們的框架使用TimerTask,所以我沒有移動到Java中的其他併發類的奢侈,我必須堅持使用它。暫停TimerTask直到下一次執行

任何建議,指針或提示,非常感謝。

感謝,

阿莎

回答

1

一種辦法是穿上BlockingQueue的任務,讓TimerTaskremove()和工藝的條目,直到隊列爲空或預先確定的已經達到極限。任何剩餘的條目將在隊列中等待下一次計劃執行。

+0

謝謝你的建議。我使用LinkedBlockingQueue來實現這一點,它解決了我的問題。謝謝,非常感謝。 – Alice

+0

優秀。您可以點擊左側的[空格勾號](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)接受此答案。 – trashgod