检索线程上下文java
也许这很简单,但我不知道怎么做 首先,我有一个类A,它创建了一个或多个带有执行器的类B(Runnable)。 每个B类必须完成一些任务,但我想知道每个线程何时完成检索线程上下文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); }
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;
}
}