为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2019-08-03 03:03:05
如何知道其他线程是否已经完成?我有一个对象,它的方法名为StartDownload()启动三个线程。当每个线程完成执行时,如何获得通知?是否有一种方法可以知道线程的一个(或全部)是否已经完成或仍在执行?
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

你应该真的更喜欢使用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如果你的项目允许的话。




查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 358 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信