【发布时间】:2015-04-28 15:52:58
【问题描述】:
有什么方法可以并行运行固定的最大线程数,并在其中一个线程完成后立即重用 Runnable 对象?因此,给定 Runnable obj 的 N 组运行参数并且只有 M 个 Runnable 对象(M
【问题讨论】:
-
您的问题的解决方案在于 Java Executor 和 ExecutorService 框架中提供的高级并发框架。您将使用它来创建一个线程池(可能是固定大小的)。然后,您将使用生产者-消费者模式将您的可运行任务排入队列。
-
我已经阅读了有关 ExecutorService 的信息,我的问题是标题指定了在一个线程完成后立即重用 Runnable 对象。
-
重用可运行文件对我来说听起来像是糟糕的设计。一个runnable应该专用于一个线程,当那个线程终止时,这意味着runnable中的任务无论如何都应该完成。为什么要另一个线程再次执行它?
-
一旦一些旧线程结束,您想在新线程中重新使用
Runnable的想法让我想知道,为什么旧线程结束了?创建和销毁线程是昂贵的。如果每个Runnable代表一个不同的任务,为什么不设计你的线程来保持运行,并在一个接一个的任务之后执行任务......?那个设计思路叫做线程池,java.util.concurrent.ThreadPoolExecutor和相关类已经为你实现了。 -
在对象分配应保持在最低限度的系统中重用 Runnable 并不是一个糟糕的设计。我正在使用对称搜索算法处理 AI 游戏树。但是,是的,我可以设计一个线程来完成一个又一个任务,并将所有任务分配给固定数量的 Runnables,然后执行它们。干杯。
标签: java multithreading runnable