2016-10-07 12 views
0

私のアプリケーションでは、イベント管理者がイベントを投稿するために複数のイベントが同時に発生しています。これらはイベントハンドラによって処理されます。イベントハンドラでは、いくつかのプライベート変数を宣言し、handleEvent()メソッドで使用されます。はOSGIイベントハンドラスレッドセーフです

スレッドの安全性に問題はありますか?イベントハンドラスレッドセーフで変数をプライベートとして宣言していますか?

答えて

4

イベントハンドラは、異なるスレッドで同時に呼び出すことができます。したがって、どのフィールドへのアクセスも安全に処理する必要があります。

変数のプライベート宣言は、スレッドの安全性とは完全に無関係です。重要な同時アクセスは、それが重要なアクセス状況ではありません。

あなたは、synchronizedキーワード、ロック、またはロックフリーの構造でアクセスを規制します。

+0

サービス(クラス)レベルで宣言されたフィールドに同時にアクセスしたり変更したりすることができますが、これは同期やロックの代わりに不確実な動作につながります。メソッドレベルローカル変数を使用してそれを使用します。 –

+0

はい、ローカル変数は常にスレッドセーフです。 –

関連する問題