SynchronousQueue处理和有序输出

时间:2013-09-23 19:34:12

标签: java concurrency queue

我想实现这样的目标:

通知N1,N2,N3,...,Nn进入SynchronousQueue。队列由10个线程处理(由ExecutorService管理)。线程处理的每个动作的时间相当不变,假设线程的动作只是装饰消息。我的期望是,作为输出,我将得到一个与输入端完全相同的顺序:N1,N2,N3,...,Nn。 只是考虑解决方案所以无法提供任何代码示例。我不知道如何在输出端执行同步。我头脑中的解决方案会生成输出序列,其顺序可能与预期的不同。

1 个答案:

答案 0 :(得分:0)

假设您正在使用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的顺序。