在java中等待执行任务的线程池
Posted
技术标签:
【中文标题】在java中等待执行任务的线程池【英文标题】:Thread pool with wait for execution of task in java 【发布时间】:2019-10-08 18:16:03 【问题描述】:我想在 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 个任务中的任何一个完成执行时才开始,所以我需要实现等待功能让任务完成。请有任何建议。
【问题讨论】:
【参考方案1】:你的带 task.wait() 的同步块除了阻塞循环之外什么都不做,因为在任何时候都没有调用 notify 方法。 所以你首先需要删除它。
其次,您的处理方法不会受益于任何多线程,因为它是在构造函数中调用的,并且对象创建是由主线程完成的。 解决方案是将您的处理方法向下移动到 run 方法中。
您正确地为线程池分配了一个限制,允许运行 10 个并发任务。
注意:订单不保证!例如,任务 11 可能在任务 8 之前运行。
【讨论】:
您好,我已根据您建议的更改更新了我的代码。如果还有什么需要更新的,请您重新检查一下。 您必须防止程序在线程池的工作人员完成任务之前终止。为此,您需要调用 ExecutorService#shutdown 和 ExecutorService#awaitTermination。该文档有一个很好的例子和解释:docs.oracle.com/javase/7/docs/api/java/util/concurrent/…以上是关于在java中等待执行任务的线程池的主要内容,如果未能解决你的问题,请参考以下文章