java执行器服务。关闭。当任务队列变为空时,如何关闭executor?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main
{
public static void main(String[] args)
{
final ExecutorService executor = Executors.newFixedThreadPool(10);
executor.execute(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < 10; i++)
executor.execute(new Runnable()
{
@Override
public void run()
{
System.out.println("run");
}
});
}
});
executor.shutdown();
try
{
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
我之所以得到RejectedExecutionException
,是因为在shutdown
之后调用了内部executor.execute
。在这种情况下我怎么能等遗嘱执行人呢
# 1 楼答案
你必须知道什么时候不再有任务了。这不是你能猜到的。将关闭移到第一个任务中,它将按照您的预期运行。i、 e.只有当你知道你不打算添加更多任务时,才呼叫关机
另一种方法是使用
这不会关闭执行器,但会停止所有线程,当不再需要执行器时,可以丢弃它。注意:如果以后添加更多任务,它将根据需要启动线程
印刷品
然后退出。注意:如果任何线程仍在运行,程序将不会退出