试图理解固定线程池我做了这个测试代码,它显示了以下结果,与我认为它会做的相反:Thread Start: 1Thread Start: 2Thread Start: 0就是这样。没有“线程结束”消息,仅启动了 3 个线程。我期望并且我希望完成所有 10 个任务。ExecutorService exec = Executors.newFixedThreadPool(3);for (int c = 0; c < 10; c++) { exec.execute(new TestThread(c));}exec.shutdown();public class TestThread implements Runnable { private int counter; public TestThread (int counter) { this.counter = counter; } @Override public void run() { System.out.println("Thread Start: " + counter); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread End: " + counter); }}
1 回答
达令说
TA贡献1821条经验 获得超6个赞
exec.shutdown()不阻塞主线程。如果您需要等待所有提交的任务完成,您需要exec.awaitTermination(1, TimeUnit.HOUR);在调用exec.shutdown();.
/**
* Blocks until all tasks have completed execution after a shutdown
* request, or the timeout occurs, or the current thread is
* interrupted, whichever happens first.
*/
boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException;
添加回答
举报
0/150
提交
取消