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

Har*_*ari 6 java multithreading

在main方法中,子线程使用java 1.5执行器服务机制启动.如何使主线程等到子线程完成?

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 9

根据经验,你不应该直接扩展Thread,因为这只会导致混乱,就像它在这里一样.

您的TestThread永远不会启动,因此您无法加入它.它所做的只是作为Runnable的行为(这是你应该使用的).

如果要等待任务完成.

Future future = executorService.submit(new TestRunnable());

// wait for the task to complete.
future.get();
Run Code Online (Sandbox Code Playgroud)

BTW:Java 1.4.2之后是Java 5.0,后来是Java 6和Java 7.