日期:2014-05-20  浏览次数:20689 次

判断两个线程谁先执行完毕
线程A和线程B并发执行不同的任务,判断哪个线程先完成,然后得到一个返回值,就另外一个未执行完的停止掉。

这个怎么实现呢?

------解决方案--------------------
static boolean tmp = true;

public static void getTmp(){
synchronized (tmp){
return tmp ;
}
}

public static void done(){
synchronized (tmp){
tmp = false;
}
}

ThreadA{
run(){
while(getTmp()){
// do something ...
if(...){
done();
}
}
}
 }

ThreadB{
run(){
while(getTmp()){
// do something ...
if(...){
done();
}
}
}
 }
------解决方案--------------------
例如主线程的类叫Main, Main中持有A, B的对象
A, B都用一个变量去控制线程是否结束,用下面的模式
A, B里有一个共享的Main对象main.
public void run() {
while (!stopped) {

}

main.stop();
}

public void setStop(boolean stopped) {
this.stopped = stopped;
}

Main的stop()方法去调用A,B的setStop(true) [如果你想狠点,直接调用interrut方法结束线程],这样,A,B中有一个线程结束时,都会全被约束