在main方法中,使用java 1.5 executor服务机制启动子线程。如何使主线程等到子线程完成?
public class MainClass {
public static void main(String[] args) {
ExecutorService executorService=null;
try {
executorService=Executors.newFixedThreadPool(1);
executorService.execute(new TestThread());
System.out.println("Main program exited...");
} catch (Exception e) {
e.printStackTrace();
} finally {
executorService.shutdown();
}
}
}
public class TestThread extends Thread {
public TestThread() {
}
public void run() {
try {
for (int i=0;i<10;i++) {
System.out.println(i);
TimeUnit.SECONDS.sleep(5);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:9)
根据经验,你不应该直接扩展Thread,因为这只会导致混乱,就像它在这里一样。
您的TestThread永远不会启动,因此您无法加入它。它所做的只是作为Runnable的行为(这是你应该使用的)。
如果您想等待任务完成。
Future future = executorService.submit(new TestRunnable());
// wait for the task to complete.
future.get();
BTW:Java 1.4.2发布之后是Java 5.0,后来是Java 6和Java 7。