如何加入使用执行程序服务启动的线程?

时间:2011-09-10 10:49:56

标签: java multithreading

在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();
        }
    }
}

1 个答案:

答案 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。