为什么在exec.shutdown()之前将exec.isTerminated()与ExecutorService一起在Java中使用?

我正在研究线程,遇到了以下代码,并且有一些疑问

#include<stdio.h>
int main()
{
        int *p[]={10,20,30,40};
        printf(" Address of p %u\n",p);
        printf("%d %d %d %d\n",p[0],p[1],p[2],p[3]);
        return 0;

如果所有任务都终止,则if条件将为False,并且线程池也不会终止,因为if条件之外没有关闭命令。

以下正确吗?

  1. 那么,是否也应该在外面关闭?

  2. 为什么还要在if条件下shutdown()等待所有预先提交的任务完成,而我们甚至可以摆脱awaitTermination()?

dzc361 回答:为什么在exec.shutdown()之前将exec.isTerminated()与ExecutorService一起在Java中使用?

没有理由致电isTerminated()。来自the documentation

  

请注意,除非首先调用isTerminatedtrue,否则shutdown永远不会shutdownNow

因此可以得出结论,exec.isTerminated()在该代码中始终为false。 if语句毫无意义,因为它的主体将始终执行。

shutdown()方法does not wait for anything:

  

启动有序关闭,在该关闭中将执行先前提交的任务,但将不接受任何新任务。

因此,awaitTermination调用仍然有用。 (但是假设五秒钟是不安全的;有更好的方法来确保所有提交的任务都已完成。)

本文链接:https://www.f2er.com/3143600.html

大家都在问