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