0

マルチスレッド プログラムであるサーバーを実行しているとします。これは、着信要求を異なるスレッド (要求ごとに 1 つ) で処理します。メソッドで単一のリクエストを処理できる RequestHandler オブジェクトがあり、

void handleRequest(Request r);

スレッド間で単一の RequestHandler オブジェクトを再利用するという点で、同時実行性の問題はないとします。スレッドごとに 1 つの RequestHandler を作成すると、パフォーマンス上の利点はありますか? それとも、スレッド間で単一の RequestHandler を再利用する方がよいでしょうか (それぞれが同じ RequestHandler への参照を維持します)。

編集:ジャックの答えに応えて-はい、handleRequest メソッドは完全にスレッドセーフであり、同期ブロックやオブジェクトが含まれていないと想定しています。

4

1 に答える 1

4

の実装handleRequest(Request r)が完全にスレッドセーフであり、同期ブロックやオブジェクトが含まれていない場合、分離されたオブジェクトと比較して、単一の共有オブジェクトを持つことには利点も欠点もありません。

これは、実装するオブジェクトにhandleRequestはもちろん変更可能な状態がないことを意味します。

すべてのスレッドは、そのコード パスをたどることにより、独立してメソッドに入ることができます。これは、複数のオブジェクトでも同じですが、this参照が異なります (メソッドが でない限りstatic)。コードがスレッド セーフである場合、this他のスレッド セーフ メソッドを呼び出さない限り、暗黙的な参照によってほとんど何も行われないため、同等です。

于 2013-09-19T02:10:36.187 に答える