Runnableを実装するクラスがあります。ロギングの理由から、クラスの実行に使用されたスレッドを知りたいです。その場合は、
public class WebSocketHandle implements Runnable {
private Thread myThread; // access to thread for logging
public void start() {
myThread = new Thread(this);
myThread.start();
}
}
次に、これらを作成するメソッドで、次のようなことを行います。
public void newSocket(Socket socket)
{
WebSocketHandle handle = new WebSocketHandle(this, socket,_identity);
_sockets.add(handle);
EventLog.write("Socket assigned for new connection (" + _sockets.size() + ") " + handle.toString() + ". No value received yet yet...", getClass().getName(), "register");
// Start thread listening for data
new Thread(handle).start();
}
または、次のようなものを使用するのが最適です。
public class WebSocketHandle implements Runnable {
private String myThread;
public void setThreadOwner(string threadId) {
myThread = threadId;
}
}
次に、それはそのように使用されます:
WebSocketHandle handle = new WebSocketHandle();
Thread newThread = new Thread(handle);
newThread.start();
handle.setThreadOwner(handle.toString());
私は仕方がないのですが、2番目のオプションがより良い練習であると感じますが、書くコードは不器用に見えますか?
編集:アーロンのコメントに応えて:
これはWebサーバーのソケット処理コード用であるため、スレッドは無期限に実行されます。私はThreadPoolsの使用を検討していなかったので、おそらくそれを検討する必要があります
WebSocketHandleクラスでさまざまなアクティビティ(つまり、送受信されたデータ)をログに記録するので、ログイベントを実行中のThreadインスタンスに関連付けたいと思いました。そのための最も簡単な方法は、ログ出力の一部としてthread.toString()をログに記録することでした。