0

私はこのようなことを達成したいと思います:

通知 N1、N2、N3、...、Nn は SynchronousQueue に送られます。キューは 10 個のスレッド (ExecutorService によって管理) によって処理されます。スレッドによって処理される各アクションの時間はかなり一定です。たとえば、スレッドのアクションがメッセージを装飾するだけであるとしましょう。私の期待は、出力として、入力側とまったく同じ順序になることです: N1、N2、N3、...、Nn。ソリューションについて考えているだけなので、コードサンプルを提供することはできません。出力側で同期を行う方法がわかりません。私の頭の中の解決策は、順序が予想と異なる可能性がある出力シーケンスを生成します。

4

1 に答える 1

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 に追加した順序になります。

于 2013-09-23T19:42:07.910 に答える