检索线程上下文java

检索线程上下文java,java,multithreading,algorithm,executorservice,Java,Multithreading,Algorithm,Executorservice,也许这很简单,但我不知道怎么做 首先,我有一个类A,它创建了一个或多个带有执行器的类B(Runnable)。 每个B类必须完成一些任务,但我想知道每个线程何时完成 Class A { private ScheduledExecutorService scheduler; private int nbThread=3; public A(){ scheduler = Executors.newScheduledThreadPool(nbThread); }

也许这很简单,但我不知道怎么做

首先,我有一个类A,它创建了一个或多个带有执行器的类B(Runnable)。 每个B类必须完成一些任务,但我想知道每个线程何时完成

Class A {
   private ScheduledExecutorService scheduler;
   private int nbThread=3;
   public A(){
      scheduler = Executors.newScheduledThreadPool(nbThread);
   }

   public start(){
      for (int i = 0; i < nbThread; i++) {
          scheduler.execute(new B();
      }
  }
}

现在我只想在这3个线程打印每个线程(system.out.println(“test”)时执行其他任务 如果一号线程没有完成,那么我们会做任何事情。 我对java不是很在行,所以我需要一些帮助。
谢谢

您可能想看看java并发包中的接口

我更新了您的
start
方法,为您提供了一个如何使用它的示例

public void start() {
    Future<?>[] futures = new Future[nbThread];

    for (int i = 0; i < nbThread; i++) {
        futures[i] = scheduler.submit(new B());
    }

    for (int i = 0; i < nbThread; i++) {
        try {
            futures[i].get(); // waits until the current B is done, and then just returns null
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // All futures now finished executing
}

你试过了吗?不,你认为这是一个很好的解决方案吗?我在考虑未来,有什么想法吗?谢谢,我在问问题:如何知道每个未来都被执行?如果我有另一个方法executeTestAfterallThread(),如何知道是否所有正在运行的线程都被执行?Future.get()等待直到将来执行。因此,最后一个循环中的每个迭代都会等待当前B完成执行。这意味着在循环(添加注释)完成后,所有未来都会完成。如果您认为这回答了您的问题,您也可以将其标记为正确答案(因此我将获得更多的信誉分数:)这里有一个链接,显示并解释了如何接受答案比我写评论更容易:)
public void start() {
    Future<?>[] futures = new Future[nbThread];

    for (int i = 0; i < nbThread; i++) {
        futures[i] = scheduler.submit(new B());
    }

    for (int i = 0; i < nbThread; i++) {
        try {
            futures[i].get(); // waits until the current B is done, and then just returns null
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // All futures now finished executing
}
class A {
    private ScheduledExecutorService scheduler;
    private int nbThread = 3;

    public A() {
        scheduler = Executors.newScheduledThreadPool(nbThread);
    }

    public void start() {
        List<Callable<Object>> callables = new ArrayList<>();
        callables.add(new B());
        callables.add(new B());
        callables.add(new B());
        try {
            scheduler.invokeAll(callables); // blocks until all B finished executing
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // All B's now finished executing

    }
}

class B implements Callable<Object> {

    public B() {

    }

    @Override
    public Object call() throws Exception {
        System.out.println("test");
        return null;
    }
}