ソケットを使用するマルチスレッドクライアントサーバーアプリケーションがあります。新しい接続が見つかると、新しいExecutorsスレッドプールを使用して新しいスレッドにさらに実行が転送されます。Thread.setName(name)の警告
そのクライアントのすべてのロギングステートメントにクライアントIDを記録します。問題は、クライアントIDを渡すだけでメソッドシグネチャを変更したくないということです。私が考え
解決策は以下のとおりです。
- クライアント値を保持するためにThreadLocalを使用しました。
- run()では、Thread.currentThread()。setName(clientId);を使用してクライアントIDをThreadに設定できます。
最初に動作するはずです。しかし、私は第二の選択肢が好きです。 です。デバッガからクライアントIDを見つけることができます b。ロガーライブラリは、スレッド名を表示するように設定できます。したがって、ログステートメントに変更は必要なく、ライブラリ内のロガーでも機能します。
javadocに記載されているものとは別に、thread.setName()を使用する際の注意点は何ですか?パフォーマンスにはどのような影響がありますか?呼び出し元のthread.setName()のピーク頻度は、毎秒約200回、平均約0.3回/秒です。
これはきれいです。私はそれを試してみます。ありがとう! – Dojo