我有一個實現Runnable的類。由於記錄的原因,我想知道已經用來運行類的線程。在這種情況下會是最好做本地線程變量或新線程 - Java
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服務器套接字處理代碼,以便該線程將被indefinetly運行。我沒有考慮使用ThreadPools,所以也許這是我需要考慮的事情
我記錄了WebSocketHandle類中的各種活動(即數據接收和發送),所以我想將日誌事件綁定到Thread實例正在運行。爲此,我發現最簡單的方法是將thread.toString()作爲日誌輸出的一部分記錄下來。
乾杯亞倫。爲什麼第二種方法更好會有特別的原因嗎? – dreza
我添加了更長的代碼分析。 –
乾杯亞倫。現在更有意義。我沒有考慮過使用ThreadPools,所以也許這是我需要考慮的事情 – dreza