gpt4 book ai didi

java - java中等待任务执行的线程池

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:08 25 4
gpt4 key购买 nike

我想在java中创建一个线程池代码,其中任务将等待直到任务中调用的函数完成。我已经经历了很多例子,但到目前为止还无法实现我的目标。

public class ThreadController {

public static void main(String args[]) {
ExecutorService service = Executors.newFixedThreadPool(5);

List<String> list = new ArrayList<String>();
list.add("john");
list.add("reck");
list.add("moni");
list.add("sasha");
list.add("pely");
for (int p = 0; p < 100; p++) {
for (int r = 0; r < 5; r++) {
Task task = new Task(list.get(r));
service.submit(task);
}
}
}
}

final class Task implements Runnable {

private String taskSimNo;

public Task(String no) {
this.taskSimNo = no;
}

public void run() {
Initiate.startingInitiate(this.taskSimNo);
}
}

这个函数的完整思想是调用一个函数processing(),它是mainMethod类的一个方法。所以我想并行运行 10 个线程,但是第 11 个任务只能在 10 个任务中的任何一个完成执行时启动,所以我需要实现等待函数来让任务完成。如有任何建议,请。

最佳答案

带有task.wait()的同步块(synchronized block)除了阻塞循环之外什么也不做,因为根本没有调用notify方法。所以你首先需要删除它。

其次,您的处理方法不会从任何多线程中受益,因为它是在构造函数内调用的,并且对象创建是由主线程完成的。解决方案是将处理方法移到 run 方法中。

您正确地为线程池分配了允许运行 10 个并发任务的限制。

注意:不保证顺序!例如,任务 11 可能会在任务 8 之前运行。

关于java - java中等待任务执行的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56253756/

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