|
|
1
7
据我所知,你需要 ExecutorService . 执行人服务
Future . 未来是一种阻碍工人和主人之间沟通的方式。您可以轻松地扩展此机制,使其以异步方式工作。是的,ExecutorService也像ThreadPoolExecutor一样维护工作队列。因此,在大多数情况下,您不需要为日程安排而烦恼。concurrent包已经有了线程安全队列的高效实现(ConcurrentLinked queue-nonblocking和LinkedBlockedQueue-blocking)。 |
|
|
2
4
退房 java.util.concurrent 在Java库中。 根据您的应用程序,它可能很简单,只需拼凑一些阻塞队列和ThreadPoolExecutor即可。 Java Concurrency in Practice 布莱恩·戈茨的著作可能会有所帮助。 |
|
3
4
首先,为什么要在工作人员开始操作这些项目后再保存它们?通常,您会有一个工作队列,工作人员会从该队列中取出项目。这也将解决“如何防止员工获得相同物品”的问题。
主人可以听工人们用键盘说话 listener/observer pattern
有一个 blocking queue 从Java5开始 |
|
|
4
1
不要忘记Jini和Javaspaces。你所描述的听起来很像天基架构擅长的经典生产者/消费者模式。 制作人将把这些工作写入空间。一个或多个消费者将(在一个事务下)取出作业并并行处理,然后将结果写回。由于它处于事务下,因此如果出现问题,该作业将再次提供给另一个消费者。 您可以通过添加更多消费者来轻松地扩展此功能。当消费者是独立的虚拟机并且您可以跨网络进行扩展时,这种方法尤其有效。 |
|
|
5
0
如果您对Spring的想法持开放态度,那么请查看他们的Spring集成项目。它提供了所有开箱即用的队列/线程池样板,让您专注于业务逻辑。使用@annotations将配置保持在最低限度。 顺便说一句,Goetz非常好。 |
|
|
6
0
这听起来不像是一个主工问题,而是一个线程池之上的专用客户机。考虑到您有很多清理线程,而没有太多的处理单元,简单地执行一个清理过程,然后再执行一个计算过程可能是值得的。通过将工作项存储在集合中,唯一性约束将删除重复项。第二个过程可以将所有工作提交给ExecutorService以并行执行该过程。 主-辅模型通常假定数据提供者拥有所有工作,并将其提供给主模型进行管理。主节点控制工作执行,并处理分布式计算、超时、故障、重试等。fork-join抽象是一个递归的而不是迭代的数据提供者。map-reduce抽象是一个多步骤的主工作程序,在某些场景中非常有用。 大师级工作者的一个很好的例子是处理琐碎的并行问题,比如寻找素数。另一种是数据加载,其中每个条目都是独立的(验证、转换、阶段)。处理已知工作集、处理故障等的需要使主工作模型不同于线程池。这就是为什么主机必须控制并将工作单元推出,而线程池允许工作人员从共享队列中提取工作。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |