当前位置: 首页 > 面试题库 >

如何使用固定数量的工作线程实现简单线程

柳飞飙
2023-03-14
问题内容

我正在寻找实现以下目标的最简单,最直接的方法:

  • 主程序实例化工作线程来执行任务。
  • 只能n一次运行任务。
  • n到达,没有更多的工人开始,直到运行的线程数降回到低于n

问题答案:

我认为Executors.newFixedThreadPool符合您的要求。有多种不同的方法可以使用生成的ExecutorService,具体取决于您是希望将结果返回到主线程,还是该任务完全独立,以及是否有要执行的任务集合,或者是否响应某些事件将任务排队。

  Collection<YourTask> tasks = new ArrayList<YourTask>();
  YourTask yt1 = new YourTask();
  ...
  tasks.add(yt1);
  ...
  ExecutorService exec = Executors.newFixedThreadPool(5);
  List<Future<YourResultType>> results = exec.invokeAll(tasks);

另外,如果您有一个新的异步任务要执行以响应某个事件,则可能只想使用ExecutorService的简单execute(Runnable)方法。



 类似资料:
  • 本文向大家介绍c++实现简单的线程池,包括了c++实现简单的线程池的使用技巧和注意事项,需要的朋友参考一下 c++线程池,继承CDoit,实现其中的start和end 头文件 CPP文件 以上所述就是本文的全部内容了,希望大家能够喜欢。 请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

  • 本文向大家介绍java简单实现多线程及线程池实例详解,包括了java简单实现多线程及线程池实例详解的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了java多线程的简单实现及线程池实例,供大家参考,具体内容如下 一、多线程的两种实现方式 1、继承Thread类的多线程 2、实现Runnable接口的多线程 二、线程池的简单实现 三、java爬虫使用线程池实例 以上就是本文的全部内容,希望对

  • 本文向大家介绍C#实现线程池的简单示例,包括了C#实现线程池的简单示例的使用技巧和注意事项,需要的朋友参考一下 本文以实例演示了C#线程池的简单实现方法。程序中定义了一个对象类,用以包装参数,实现多个参数的传递。成员属性包括两个输入参数和一个输出参数。代码简单易懂,备有注释便于理解。 具体实现代码如下:

  • 我想写一个简单的线程安全类,可以用来设置或获取整数值。 最简单的方法是使用synchronized关键字: 我也可以尝试使用挥发性: 带有易失性关键字线程安全的类吗? 考虑下面的事件顺序: 线程A将该值设置为5 根据Java语言规范 “1”发生在“3”之前 但我不明白“1”怎么会出现在“2”之前,所以我怀疑“1”不会出现在“2”之前。 我怀疑线程C的读数可能是7或5。我认为带有volatile关键

  • 我试图理解fork-join的窃取部分。fork-join池具有具有自己Deque的工作线程。如果工作线程自身的deque为空,则该线程从另一个工作线程中窃取。 线程如何访问其他线程的状态? 当所有者线程和窃取者线程尝试访问取消排队中的同一项目时,它不会产生同步问题吗?

  • 上下文:我正在设计一个应用程序,它将使用来自各种Amazon SQS队列的消息。(超过25个队列)为此,我正在考虑创建一个库来使用队列中的消息(称为MessageConsumer) 我希望根据队列中的流量动态分配线程来接收/处理来自不同队列的消息,以最大限度地减少资源浪费。我有两种方法可以做这件事。 1)只能有一种类型线程轮询队列、接收消息并处理这些消息,且所有队列都有一个公共线程池。2)可以有单