[英]Thread pool with wait for execution of task in java
我想在java中创建一个线程池代码,其中task将等待,直到task中调用的函数完成。 我已经看过很多例子,但到目前为止还无法实现我的目标。
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);
}
}
该函数的完整思想是调用一个函数process(),它是mainMethod类的方法。 所以我想并行运行10个线程,但是第11个任务应该仅在10个任务中的任何一个完成执行时才开始,因此我需要实现wait函数来使任务完成。 有任何建议请。
与task.wait()同步的块只会阻塞循环,因为在任何时候都不会调用notify方法。 因此,您首先需要删除它。
其次,您的处理方法不会从任何多线程中受益,因为它是在构造函数中调用的,而对象的创建是由主线程完成的。 解决方案是将处理方法移到运行方法内。
您已为线程池正确分配了一个限制,以允许10个并发任务运行。
注意:不能保证订购! 例如,任务11可能在任务8之前运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.