加入主线程启动一个子线程,当子线程结束时,主线程能够立刻被通知,请问有什么方法
------解决方案--------------------------------------------------------
使用 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();