java中具有等待执行任务的线程池
我想在java中创建一个线程池代码,其中task将等待直到task in中调用的函数完成。我已经经历了很多例子,但到目前为止还不能实现我的目标java中具有等待执行任务的线程池,java,multithreading,thread-safety,threadpool,Java,Multithreading,Thread Safety,Threadpool,我想在java中创建一个线程池代码,其中task将等待直到task in中调用的函数完成。我已经经历了很多例子,但到目前为止还不能实现我的目标 public class ThreadController { public static void main(String args[]) { ExecutorService service = Executors.newFixedThreadPool(5); List<String> list
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);
}
}
公共类线程控制器{
公共静态void main(字符串参数[]){
ExecutorService=Executors.newFixedThreadPool(5);
列表=新的ArrayList();
列表。添加(“约翰”);
列表。添加(“记录”);
列表。添加(“moni”);
列表。添加(“萨沙”);
列表。添加(“贝利”);
对于(int p=0;p<100;p++){
对于(int r=0;r<5;r++){
任务任务=新任务(list.get(r));
服务提交(任务);
}
}
}
}
最后一个类任务实现Runnable{
私有字符串taskSimNo;
公共任务(字符串号){
this.taskSimNo=no;
}
公开募捐{
Initiate.startingInitiate(此.taskSimNo);
}
}
此函数的完整思想是调用函数processing(),它是mainMethod类的一个方法。所以我想并行运行10个线程,但是第11个任务应该只在10个任务中的任何一个完成执行时启动,所以我需要实现wait函数来让任务完成。请提供任何建议。您与task.wait()的同步块只会阻塞循环,因为没有对notify方法的调用。 所以你首先需要去掉它 其次,您的处理方法不会从任何多线程中受益,因为它是在构造函数中调用的,对象创建是由主线程完成的。 解决方案是在run方法中向下移动处理方法 您正确地为线程池分配了允许运行10个并发任务的限制
注意:不保证订单!例如,Task 11可能在Task 8之前运行。与Task.wait()同步的块只会阻塞循环,因为没有对notify方法的调用。 所以你首先需要去掉它 其次,您的处理方法不会从任何多线程中受益,因为它是在构造函数中调用的,对象创建是由主线程完成的。 解决方案是在run方法中向下移动处理方法 您正确地为线程池分配了允许运行10个并发任务的限制
注意:不保证订单!例如,任务11可能在任务8之前运行。您好,我已经用您建议的更改更新了代码。如果还需要更新,请重新检查。您必须防止程序在线程池的工作人员完成任务之前终止。为此,您需要调用ExecutorService#shutdown和ExecutorService#Wait Termination。文档中有一个很好的例子和解释:您好,我已经用您建议的更改更新了我的代码。如果还需要更新,请重新检查。您必须防止程序在线程池的工作人员完成任务之前终止。为此,您需要调用ExecutorService#shutdown和ExecutorService#Wait Termination。文档中有一个很好的例子和说明: