我想实现这样的目标:
通知 N1、N2、N3、...、Nn 进入同步队列。队列由 10 个线程处理(由 ExecutorService 管理)。线程处理每个动作的时间是相当恒定的,假设线程的动作只是装饰消息。我的期望是,作为输出,我将有一个与输入端完全相同的顺序:N1、N2、N3、...、Nn。只是考虑解决方案,因此无法提供任何代码示例。我不知道如何在输出端执行同步。我脑海中的解决方案会生成输出序列,其中顺序可能与预期不同。
我想实现这样的目标:
通知 N1、N2、N3、...、Nn 进入同步队列。队列由 10 个线程处理(由 ExecutorService 管理)。线程处理每个动作的时间是相当恒定的,假设线程的动作只是装饰消息。我的期望是,作为输出,我将有一个与输入端完全相同的顺序:N1、N2、N3、...、Nn。只是考虑解决方案,因此无法提供任何代码示例。我不知道如何在输出端执行同步。我脑海中的解决方案会生成输出序列,其中顺序可能与预期不同。
假设您使用的是 ExecutorService,您可以让线程输出结果。
ExecutorService multiThreaded = Executors.newFixedThreadPool(N);
ExecutorService outputThread = Executors.newSingleThreadedPool();
Future future = multiThreaded.submit(new Callable<Object>() {
public Object call() throws Exception {
/// do some work
return theResult;
}
});
outputThread.submit(new Runnable() {
public void run() {
Object theResult = future.get();
// output the result
}
});
结果将按照您将它们添加到 outputThread 的顺序排列。