15

私は、徐々に大きくなっていくプロジェクトに取り組んでおり、さまざまなプロセスで使用されるアクティブなスレッドの数が増えています。最近、デバッガーで実行中のスレッドを詳しく調べていて、多くのサードパーティ ライブラリがスレッドに非常に貧弱な名前 (Timer-0、qtp0 など) を付けていることに気付きました。何が実行されているかを即座に知るために、不適切な名前のスレッドを使用します。

使用しているライブラリのパッチを作成するのではなく、実行中のスレッドの名前を変更する方法を知っている人はいますか? または、これが良いアイデアである場合はどうなりますか?任意の提案をいただければ幸いです。

4

7 に答える 7

11

はい、setName()メソッドでスレッドの名前を変更できます。

それが良い考えかどうかについては、確かなことはわかりませんが、人間が読める説明以外の目的でスレッド名に依存することは非常に悪い決定であり、ほとんどのライブラリはこれを行いません。したがって、それらの名前を変更しても、何かが壊れることはほとんどありません。

于 2009-01-21T22:15:32.980 に答える
6

問題がオープン ソース ライブラリにある場合、最善の解決策は、それらの製品にパッチを提供して、スレッドの命名を改善することです。セキュリティマネージャーが実行されていなければ、スレッドを列挙し(他の人が述べたように)、それぞれに任意の名前を付けることで、任意のスレッドの名前を変更できますが、これは自分のものではないスレッドに名前を付ける脆弱な方法です. サード パーティ ライブラリの名前が変更された場合は、コードを変更する必要があります。

スレッドの名前が不適切なサードパーティ製ライブラリを使用すると、アプリケーションで何が起こっているのかを理解するのが難しくなることに同意します。ただし、サードパーティのライブラリからスレッドの名前を変更するのは危険です。次のリリースでスレッドの命名方法が変更されたらどうなりますか? また、スレッドに名前を付けようとしないサードパーティのライブラリをどのように処理しますか?

編集: どういうわけか最後から消えたテキストを追加します

于 2009-01-22T05:02:26.293 に答える
5

私が作成するすべてのスレッドに名前を付けます。スレッドをリークしたり、スレッドが制御不能になったりするアプリが多すぎます。

Java をオペレーティング システムとして扱うほど、管理が容易になります。:)

于 2009-01-26T05:00:16.037 に答える
3

Thread.enumerate()またはを使用Thread.getAllStackTraces()して、実行中のスレッドのリストを取得できます。その後、それぞれを呼び出すことができますThread.setName()

それが良いアイデアかどうかはわかりませんが、おそらく「いいえ」の方に傾くでしょう。書くコードが多ければ多いほど、維持しなければならないコードも増えます。

于 2009-01-21T22:13:36.603 に答える
1

これにより、スレッドの命名規則に関するベスト プラクティスについて疑問が生じます。この点に関するコミュニティ ガイダンスは見たことがありません。

于 2009-04-17T13:25:53.533 に答える
1

setName()スレッドの名前を変更するために使用できますが、スレッドの名前を決定する何らかの方法が必要です。
getAllStackTraces()これにより、プログラムはスタック トレースの例を示し、クラス/メソッド/ファイル名をスレッドの呼び出しに関するヒントとして使用できるようになります。

于 2009-01-21T22:18:22.647 に答える