当前位置: 代码迷 >> J2SE >> 怎么获得线程结束消息
  详细解决方案

怎么获得线程结束消息

热度:3642   发布时间:2013-02-25 00:00:00.0
如何获得线程结束消息
加入主线程启动一个子线程,当子线程结束时,主线程能够立刻被通知,请问有什么方法

------解决方案--------------------------------------------------------
使用 Google Guava 提供的 ListeningExecutorService 启动线程会返回一个 ListenableFuture<?>。

Java code
ListenableFuture<XX> future = ...;Futures.addCallback(future,     new FutureCallback<XX> {       public void onSuccess(XX result) {         xx(result);       }       public void onFailure(Throwable t) {         reportError(t);       }     });
------解决方案--------------------------------------------------------
Java code
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();    }}
------解决方案--------------------------------------------------------
探讨

引用:
楼主描述不祥,就是通知了主线程之后主线程要干些什么,通知的时候主线程正在干什么

比如主线程只在执行其它语句,通知到它它该如何处理


我的意思是当一个子线程结束后,主线程能够立刻知道子线程结束了,有什么方法

------解决方案--------------------------------------------------------
我想是否可以考虑使用守护线程
------解决方案--------------------------------------------------------
如果主线程没事做的话,可以等待子线程结束:childThread.join(); //等待childThread线程执行结束。
否则的话,主线程要另外再开一个子线程,在这个新开的子线程里什么都不干,就等待:childThread.join();
  相关解决方案