读书人

怎么获得线程结束消息

发布时间: 2012-10-27 10:42:26 作者: rapoo

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

[解决办法]
使用 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();

读书人网 >J2SE开发

热点推荐