我当前正在执行一项任务,如果客户端请求,我必须停止一个多线程进程。 我当时正在考虑采用一个静态变量标志,并将其初始化为false,可以不时对其进行不断检查,如果它变为true,我们可以停止线程的执行。
我要寻找的方法之一是是否可以覆盖CountDownLatch的await()方法或ExecutorService类的awaitTermination()方法。 覆盖的方法将检查该标志是否为true,然后它将调用基类的方法,否则我可以调用shutDownNow()。
有点像:
ExecutorService executorService =
Executors.newFixedThreadPool(THREADS_COUNT);
CountDownLatch tasksLeft = new CountDownLatch(THREADS_COUNT);
while(i++ < processCount) {
RandomProcessThread thread = new RandomProcessThread(i, someParams);
executorService.submit();
}
tasksLeft.await();
if(shutDownFlagTrue) {
executorService.shutDownNow();
}
@Override
public void await() throws InterruptedException {
if(hasClientRequestedToStop)
shutDownFlagTrue = true;
else
this.await();
}
也欢迎任何其他有关如何实现此目标的意见。
谢谢。