在另一个线程完成执行后执行某些操作

时间:2015-07-28 06:47:04

标签: java multithreading

我有threadA运行threadBthreadB完成其运行方法后,我希望threadA执行一些操作。当然,我可以在threadA的代码中执行类似的操作:

Thread threadB = new Thread(myRunnable);
threadB.run();
threadB.join();
doStuff();

但这会使threadA等到threadB完成执行。我不希望这种情况发生。

我希望threadAthreadB运行时保持正常运行,并且只要threadB终止,就会调用doStuff()。像这样:

//some code

Thread threadB = new Thread(myRunnable);
// block for b
{
    threadB.run();
    threadB.join();
    doStuff();
}

//some more code which should run while "block for b" is running

2 个答案:

答案 0 :(得分:3)

  

threadB正在运行,一旦threadB终止,就会调用doStuff()。

一个更简单的解决方案是让ThreadB在完成运行后执行操作。

Thread threadB = new Thread(new Runnable() {
    public void run() {
        try {
           myRunnable.run();
        } finally {
           doStuff();
        }
    }
});

这样就不需要涉及其他线程了。

答案 1 :(得分:0)

threadA中,轮询threadB.isAlive(),如果threadB不再运行,请执行您要执行的操作:

threadB.start();
while (...) {
    ...
    if (!threadB.isAlive()) {
        // do stuff
    }
}