我想在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 之前运行。
我是一名优秀的程序员,十分优秀!