猿问

如何知道其他线程是否已经完成?

如何知道其他线程是否已经完成?

我有一个对象,它的方法名为StartDownload()启动三个线程。

当每个线程完成执行时,如何获得通知?

是否有一种方法可以知道线程的一个(或全部)是否已经完成或仍在执行?



RISEBY
浏览 359回答 3
3回答

守着星空守着你

你应该真的更喜欢使用java.util.concurrent..找到并阅读关于这个主题的乔希·布洛赫和/或布莱恩·戈茨。如果你不使用java.util.concurrent.*并且直接负责使用线程,那么您可能应该使用join()知道线程何时完成。这里有一个超级简单的回调机制。首先扩展Runnable接口进行回调:public interface CallbackRunnable extends Runnable {     public void callback();}然后,创建一个执行程序,它将执行您的可运行程序,并在完成时给您回电话。public class CallbackExecutor implements Executor {     @Override     public void execute(final Runnable r) {         final Thread runner = new Thread(r);         runner.start();         if ( r instanceof CallbackRunnable ) {             // create a thread to perform the callback             Thread callerbacker = new Thread(new Runnable() {                 @Override                 public void run() {                     try {                         // block until the running thread is done                         runner.join();                         ((CallbackRunnable)r).callback();                     }                     catch ( InterruptedException e ) {                         // someone doesn't want us running. ok, maybe we give up.                     }                 }             });             callerbacker.start();         }     }}另一种-很明显的东西-添加到你的CallbackRunnable接口是处理任何异常的一种方法,因此可以将public void uncaughtException(Throwable e);在那里和您的执行器中,安装一个Thread.UnconghtExceptionHandler,将您发送到该接口方法。但做所有这些事都会让人觉得java.util.concurrent.Callable..你真的应该看看java.util.concurrent如果你的项目允许的话。
随时随地看视频慕课网APP

相关分类

Java
我要回答