我有一個ExecutorService
(或atm的子類ThreadPoolExecutorService
),我將任務傳遞給submit(Runnable r)
。ExecutorService.submit,等待已安排的類似實例
有時候同樣的任務會在它仍在運行的時候被重新提交,然後我想第二次提交等待第一個完成。即排隊。如何才能做到這一點?只有提交的任務已經運行,它才應該排隊,否則應該直接執行。
返回的Future<>
s將用於有時取消任務。
類似這樣;
Runnable r = new LengthyRunnable();
Future<?> f1 = submit(r); //should start to run
Future<?> f2 = submit(r); //should be queued and wait for f1
Future<?> f3 = submit(r); //in case f1 hasnt finished, and f2 is queued, should remove f2 from the queue and take it's place
我已經子類ThreadPoolExecutorService,我usind beforeExecute和afterExecute跟蹤的任務,但它變得困難......我應該用其他的東西再ThreadPoolExecutorService
?