如何获得线程结束消息 加入主线程启动一个子线程,当子线程结束时,主线程能够立刻被通知,请问有什么方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用 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); } }); 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(); JMStudio 注册了摄像头信息,但是无法调用,怎么办..? 程序生成后运行没反应~调试正常 救命 Swing 设计视图变成只读 JAVA初学,几个问题 初学者在mysql中的小问题 发几篇swing中关于JTable中的运用-4 多线程又不解?一例子! 初用eclipse,求教 java中16进制字符串转int的问题 分特阿,为什么我的Session变量出错?? 多线程问题-求解 集合Collections使用的问题
Futures.addCallback(future,
new FutureCallback<XX> {
public void onSuccess(XX result) {
xx(result);
}
public void onFailure(Throwable t) {
reportError(t);
}
});
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();