java - 我怎么知道线程作业已经完成?

标签 java multithreading

在 B 类中,我如何知道线程的作业已完成?在属性之后,一些 worker 正在运行。在 B 类中,我需要知道 worker 是否完成?

public class A implements InitializingBean{
     public void method1(){
        ...
    }    
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.print("test after properties set");      
        // send threads to executorService
        ExecutorService executorService = Executors
                .newFixedThreadPool(4);
        for (int i = 0; i < 4; i++) {
            Worker worker = new Worker();       
            executorService.submit(worker);
        }
    }
}
public class Worker implements Callable<Void>{
    @Override       
    public void call(){
     ...
   }
}
public class B{
   public void methodB(){
      A a = new A();
     a.method1();
     ///Here How can i know the job of the workers are finished?
   }
}

最佳答案

使用监听器/回调模式让线程向监听器报告完成。这个简单的例子应该显示过程:

public interface ThreadCompleteListener {
    void workComplete();
}

public class NotifyingThread extends Thread {
    private Set<ThreadCompleteListener> listeners;
    // setter method(s) for adding/removing listeners to go here

    @Override
    public void run() {
        // do stuff
        notifyListeners();
    }

    private void notifyListeners() {
        for (ThreadCompleteListener listener : listeners) {
            listener.workComplete(); // notify the listening class
        }
    }
}

在你的听力课上:

NotifyingThread t = new NotifyingThread();
t.addListener(new ThreadCompleteListener() {
    void workComplete() {
        // do something
    }
});

t.start();

关于java - 我怎么知道线程作业已经完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754102/

相关文章:

java - 我正在尝试获取一个值,同时使用来自 3 个数组的索引?

java - 开关盒中的变量范围

c# - ThreadPool.QueueUserWorkItem - 订单未保留?

python - fork 后正在运行的线程会发生什么情况?

c# - 从内部对象方法获取线程名称

java - 如何使用JAVA控制通过USB/串口等连接PC的LED灯?我应该使用什么设备?

java - 使用mockito的@InjectMocks绕过setter注入(inject)

java - 将字节数组转换为固定长度的字母数字字符串

c++ - boost asio async_read 中的随机 EOF

C# IE BHO : How do I marshal DOM objects to a worker thread?