Java多線程中Thread.currentThread()和this的區(qū)別詳解
Thread.currentThread()和this的區(qū)別
線程中有兩個對象在剛開始的時候會遇到:
Thread.currentThread().getName(); this.getName()
能夠this.getName()的前提是你必須繼承了Thread類, .getName()方法是從Thread類中繼承下來的;
現(xiàn)在看代碼:
public class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub System.out.println(Thread.currentThread().getName()); System.out.println(this.getName()); } }
main方法:
public class MyRun { public static void main(String[] args) { // TODO Auto-generated method stub MyThread t1=new MyThread(); t1.run(); t1.start(); } }
運行結(jié)果:
main
Thread-0
Thread-0
Thread-0
首先第一個結(jié)果"main",是運行了下面這個代碼
System.out.println(Thread.currentThread().getName());
Thread.currentThread()獲取的是當(dāng)前執(zhí)行的線程,而因為沒有開始線程只是調(diào)用了類中的run方法,所以還只是main這個線程在執(zhí)行.
第二個結(jié)果"Thread-0",是運行了下面這個代碼:
System.out.println(this.getName());
this.getName()調(diào)用的是當(dāng)前對象的方法,而當(dāng)前對象我并沒有寫該方法,那就是調(diào)用它父類Thread的方法,而且我們在初始化的時候也并沒有命名,那這"Thread-0"又是從何而來呢,進(jìn)入Thread類查看:
首先找到name屬性:
可以看到該name是沒有被初始化的;
那么找到該Thread類的接口Runnable初始化構(gòu)造函數(shù):
在這里我們還是看不出來name是如何賦值的,進(jìn)入"init()"方法繼續(xù)查看:
從這里我們就看到了"name"值被傳入一個"Thread-",但是后面的"0"我找了很久是真的沒找到,但是這并不影響我們的推斷,那就是this指的是本對象,而Thread.current指向的是當(dāng)前線程.
第三個結(jié)果和第三個結(jié)果還不好解釋,修改代碼:
增加一行代碼:
運行結(jié)果:
也就是說,在線程未開啟的時候,兩個對象不是同一個,this對象是本身對象,而Thread.currentThread()是main對象;
當(dāng)線程啟動的時候,Thread.currentThread()對象就是this對象了;
所以說到底應(yīng)該能夠動后面兩個結(jié)果是為什么了.
到此這篇關(guān)于Java多線程中Thread.currentThread()和this的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Thread.currentThread()和this的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計模式之代理模式與@Async異步注解失效的解決
代理模式是Java常見的設(shè)計模式之一。所謂代理模式是指客戶端并不直接調(diào)用實際的對象,而是通過調(diào)用代理,來間接的調(diào)用實際的對象2022-07-07springboot搭建訪客管理系統(tǒng)的實現(xiàn)示例
這篇文章主要介紹了springboot搭建訪客管理系統(tǒng)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01SpringMVC參數(shù)的傳遞之如何接收List數(shù)組類型的數(shù)據(jù)
這篇文章主要介紹了SpringMVC參數(shù)的傳遞之如何接收List數(shù)組類型的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10Java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法
我們開發(fā)微信小程序的過程中,我們的服務(wù)端有時需要獲取微信提供的開放數(shù)據(jù)。微信會對這些開放數(shù)據(jù)做簽名和加密處理,本文通過實例代碼給大家介紹Java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法,感興趣的朋友一起看看吧2021-11-11解決IDEA service層跳轉(zhuǎn)實現(xiàn)類的快捷圖標(biāo)消失問題
這篇文章主要介紹了解決IDEA service層跳轉(zhuǎn)實現(xiàn)類的快捷圖標(biāo)消失問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02