如何在Java中覆盖CountDownLatch的await()方法?

时间:2018-11-17 15:46:39

标签: java multithreading

我当前正在执行一项任务,如果客户端请求,我必须停止一个多线程进程。 我当时正在考虑采用一个静态变量标志,并将其初始化为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();
}

也欢迎任何其他有关如何实现此目标的意见。

谢谢。

0 个答案:

没有答案