我有大量的状态机。偶尔,状态机将需要从一个状态移动到另一个状态,这可能很便宜或昂贵,并且可能涉及DB读取和写入等。从很多队列中消耗
这些状态更改是由于来自客户端的传入命令而发生的,并且可能随时发生。
我想平行工作量。我想要一个队列说'把这台机器从这个状态移到这个状态'。显然,任何一台机器的命令都需要按顺序执行,但如果我有很多线程,我可以并行向前移动许多机器。
我可以为每个状态机器设置一个线程,但状态机的数量是依赖于数据的,可能有数百或数千个;我不想每个状态机都有一个专用的线程,我想要一个某种类型的池。
我怎样才能有一个工作者池,但确保严格按顺序处理每个状态机的命令?
UPDATE:所以想象Machine
实例有优秀的命令列表。当线程池中的执行程序完成使用命令时,如果它具有更多未完成的命令,它会将Machine
放回到线程池的任务队列中。所以问题是,如何在追加第一个命令时自动将Machine
加入到线程池中?并确保这是所有线程安全?
看看[这篇文章](http://java.dzone.com/articles/ensuring-order-execution-tasks)。也许它有帮助。 –