【发布时间】:2018-10-03 17:48:26
【问题描述】:
为了理解固定线程池,我编写了这个测试代码,它显示了以下结果,与我认为的相反:
Thread Start: 1
Thread Start: 2
Thread 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);
}
}
【问题讨论】:
-
效果很好。但你必须在完成与 exec 的工作后调用 exec.shutdown()。
-
@Amin
shutdown将“锁定”执行程序并开始杀死空闲线程。不需要为了“让它工作”而调用它 -
你的意思是它运作良好?它打印我展示的内容。其他 7 个线程在哪里,为什么不打印“线程结束”
-
@Moonstone 不是 其他 7 个线程,因为您只有 3 个线程,而是“其他任务*
-
因为我检查它并且工作。关于关机,我知道如果你没有调用它,它就是等待接受更多可运行和可调用并且程序没有完成。
标签: java multithreading java-threads