gpt4 book ai didi

java - 检索线程上下文java

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:46 24 4
gpt4 key购买 nike

也许这很容易做,但我不知道该怎么做。

首先,我有一个类 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();
}
}

Class B implement Runnable {

public B(){

}

@Override
public void run(){
System.out.printl("test");
}

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

最佳答案

您可能想要查看的是 Future java并发包中的接口(interface)。

我更新了你的 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
}

更新:如果您总是想等到所有任务完成,另一种解决方案是使用 ExecutorService.invokeAll .就像在下面的示例中一样(请注意,我更改了 B 以实现 Callable

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;
}
}

关于java - 检索线程上下文java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36319026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com