在對多線程做一些實踐的時候,我發現我不能在我的代碼中設置線程的名字。我可以使用this
來引用當前對象,那麼爲什麼我在構造線程來訪問當前線程時無法使用Thread.currentThread。我有點困惑。請幫幫我。在構造函數中的「this」對象和CurrentThread之間
實際創建線程時?是在構建線程實例時還是在線程上調用方法start()時?
currentThread是什麼意思?
public class RecursiveRunnableTest {
public static void main(String... args){
Thread t = new Thread(new RecursiveRunnable("First thread"));
t.start();
}
}
class RecursiveRunnable implements Runnable {
private String name;
public RecursiveRunnable(String name) {
this.name = name;
Thread.currentThread().setName(this.name); // Expecting to set the name of thread here
}
@Override
public synchronized void run() {
System.out.println(Thread.currentThread().getName()); // displaying Thread-0
System.out.println(this.name); // displaying "First thread"
try{
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
}
}
}
'this',在你的代碼,是RecursiveRunnable的實例,而不是線程 –
順便說一句,不申報'run'方法爲'synchronized'。在最好的情況下,它將被淘汰。但在更復雜的代碼中執行此操作時,您可能會得到令人驚訝的結果。 – Holger
@Holger,我實際上在玩多線程。我發現這種差異。 – CHowdappaM