我的要求是使這使在特定的時間間隔&過程後檢查隊列在隊列中的元素的服務。工作,如果線程已經忙
調度任務後10秒,我使用的是:
ScheduledExecutorService schd = Executors.newSingleThreadScheduledExecutor();
schd.scheduleAtFixedRate(readQueueRunnable, 10, 10, TimeUnit.SECONDS);
我的問題是假設第一次,隊列中有許多元素和我的單個線程開始處理隊列中。
即使在10秒後我的第一個線程仍在執行它。
所以,當10秒後,可運行再次調用,將它停止先前執行的線程,並開始新的。 或者,它會檢查線程是否已經在運行&,如果它正在運行,那麼在這種情況下它將跳過Runnable內部。
調度隊列檢查聽起來很奇怪,我只是用[BlockingQueue的#輪詢(超時)](HTTP: //docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html#poll%28long,%20java.util.concurrent。TimeUnit%29)在專用的消費者線程中 – zapl