加入主线程启动一个子线程,当子线程结束时,主线程能够立刻被通知,请问有什么方法

解决方案 »

  1.   

    使用 Google Guava 提供的 ListeningExecutorService 启动线程会返回一个 ListenableFuture<?>。ListenableFuture<XX> future = ...;
    Futures.addCallback(future,
         new FutureCallback<XX> {
           public void onSuccess(XX result) {
             xx(result);
           }
           public void onFailure(Throwable t) {
             reportError(t);
           }
         });
      

  2.   


    public interface ThreadListener {
        public void threadStart(Object source);
        public void threadFinished(Object source);
    }public class MyThread extends Thread {
        public ThreadListener listener;
        public void setThreadListener(ThreadListener tl){
            this.listener = tl;
        }
        public void run(){
            if(this.listener != null)
                this.listener.threadStart(this);
            //......
            
            if(this.listener != null)
                this.listener.threadFinished(this);
        }
    }public class Main implements ThreadListener {
        
        public void threadStart(Object source){
            System.out.println("线程开始了");
        }
        public void threadFinished(Object source){
            System.out.println("线程结束了");
        }
        private void test(){
            Thread[] threads = new Thread[10];
            for(int i=0; i<threads.length; i++){
                MyThread thread = new MyThread();
                thread.setThreadListener(this);
                thread.start();
                
                threads[i] = thread;
            }
            for(Thread thead : threads){
                thread.join();
            }
        }
        public static void main(String[] args){
            Test t = new Test();
            t.test();
        }
    }
      

  3.   

    如果主线程没事做的话,可以等待子线程结束:childThread.join(); //等待childThread线程执行结束。
    否则的话,主线程要另外再开一个子线程,在这个新开的子线程里什么都不干,就等待:childThread.join();