2017-09-27 4 views
0

私はブローカートピックを持ち、複数のデフォルトのメッセージリスナーまたは単純なメッセージリスナーを持つ予定です。すべてのリスナーが同じコードを実行します。複数のリスナーは同じコードで動作できますか?

  1. 各リスナーコードは別のコード実行と独立していますか。私が尋ねようとしていることは、同じメソッドにアクセスするときにリスナー間で矛盾が生じるかどうかです。

私はマルチスレッド実行のように動作します。 私はブローカーとしてJMSとactivemqを使用しています。

理解するコード: 各リスナーは、このメソッドをイベント送信の「イベント処理」と呼びます。このメソッドは、他のメソッドを呼び出します。 handleメソッドは、他のメソッドを呼び出します。

private void eventProcessing(final Event Event){ 
     try { 
       if(Event.isDatafileTransaction()){ 
       final EventDatafileTransaction datafileTransaction = Event.getDatafileTransaction(); 

          final List<Events> transactions = getDatafileTransactions(datafileTransaction); 
          final List<AcEventRecordOperation> recordOperations = getTransactionsAsListOfRecordOperations(datafileTransaction, transactions); 

          if (recordOperations != null && recordOperations.size() > 0) { 

            recordOperationListener.handle(recordOperations); 

         } 

       } 
     } catch (Throwable t) { 

     } 

    } 
+0

詳細なコードスニペットがなければわかりにくいですが、基本的なマルチスレッドと並行性は引き続き適用されます。 eventProcessingメソッドがクラス上にあり、複数のリスナーから呼び出され、各リスナーによって渡されるEventオブジェクトが個々のリスナーに対して一意であるとすれば、ここではスレッドセーフです –

答えて

0

リスナーはスレッドセーフである必要があります。フィールド(クラスレベルの変数)を持たないか、同期で保護する必要があります。

関連する問題