我有一个ExecutorService
(或 atm 的子类ThreadPoolExecutorService
),我将任务传递给submit(Runnable r)
.
有时,相同的任务会在它仍在运行时(重新)提交,然后我希望第二个提交等待第一个完成。即排队。如何做到这一点是一种更可取的方式?只有当提交的任务已经在运行时才应该排队,否则应该直接执行。
返回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 子类化,并且我使用 beforeExecute 和 afterExecute 来跟踪任务,但这变得越来越困难......我应该使用除 a 之外的其他东西ThreadPoolExecutorService
吗?