我有一个实现 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());
我不禁觉得第二种选择是更好的做法,但编写的代码似乎更笨拙??
编辑:回应亚伦的评论:
这是针对 Web 服务器套接字处理代码的,因此线程将无限期地运行。我没有考虑过使用 ThreadPools 所以也许这是我需要考虑的事情
我在 WebSocketHandle 类中记录各种活动(即接收和发送的数据),因此我想将日志记录事件与它正在运行的 Thread 实例联系起来。为此,我发现最简单的方法是将 thread.toString() 记录为日志输出的一部分。