2
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
,因为内部executor.execute
在shutdown
之后调用。在这种情况下我该如何等待执行者?ExecutorService.shutdown。当任务队列变空时,我怎样才能关闭执行程序?
我发表了这段代码。在我的程序中,有两级以上的通话,我无法知道任务何时结束。在第一次“执行”之后,队列中有1个任务,我想知道队列何时变空。 – eXXXXXXXXXXX2
如果您不知道何时不想添加更多任务,则无人执行;)如果知道可能添加任务的任务数量,并且存在最后一个任务时可以调用关闭,则可以使用计数器。例如以'ai = new AtomicInteger(50);'开头或者是大小和使用'if(ai.decrementAndGet()== 0)executor.shutdown();' –
我认为Java中有一些工具可以使用它。显然,我需要像您的定制解决方案。谢谢你) – eXXXXXXXXXXX2