Java ExecutorService会阻止它所在的方法吗?
我是一个Java新手,我知道我的问题可能很傻。。。我发现如果我不调用ExecutorService,ExecutorService会阻止我的主方法返回。shutdown:Java ExecutorService会阻止它所在的方法吗?,java,Java,我是一个Java新手,我知道我的问题可能很傻。。。我发现如果我不调用ExecutorService,ExecutorService会阻止我的主方法返回。shutdown: class Test{ public static void main(String[] args){ ExecutorService exec = new Executors.newCachedThreadPool(); exec.execute(new Runnable(){
class Test{
public static void main(String[] args){
ExecutorService exec = new Executors.newCachedThreadPool();
exec.execute(new Runnable(){
public void run(){
System.out.println("I am running!");
}
});
}
}
上面的代码不会在主线程中返回。
我想知道为什么ExecutorService一直阻塞main方法,它的目的是强迫程序员调用shutdown吗?它不是阻塞,只是在Java中,只要存在非守护进程线程,应用程序就不会关闭:
class Test{
public static void main(String[] args){
ExecutorService exec = new Executors.newCachedThreadPool();
exec.execute(new Runnable(){
System.out.println("I am running!");
});
System.out.println("I am Main!"); //This will run...
}
}
如果要关闭应用程序,必须关闭Executor服务。我认为您误解了正在发生的事情。这并不是因为它阻塞了main方法,而是JVM仍然在运行,因为通过创建一个执行器并向其提交一个任务,您已经在JVM中启动了另一个线程
此执行器不知道您要向其提交多少任务,因此它将保持其线程运行,直到您明确告诉它关闭。什么意思是阻止主方法?需要实现Runnable的run方法。@Roee Gavirel我的意思是主函数将不会运行return@WeizeSun增加一个;在需要的地方,在exec.execute后面有一个print语句,这样我们就可以准确地知道它去了哪里,不去了哪里