十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇文章給大家分享的是有關(guān)線程類Thread中的方法是什么,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創(chuàng)新互聯(lián)公司專注于武勝網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供武勝營銷型網(wǎng)站建設(shè),武勝網(wǎng)站制作、武勝網(wǎng)頁設(shè)計、武勝網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造武勝網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供武勝網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1)currentThread(): public static Thread currentThread() 說明:返回當(dāng)前正在執(zhí)行的線程對象的引用,即返回調(diào)用當(dāng)前代碼的線程對象。
2) join(): public final void join(long millis) throws InterruptedException 參數(shù):等待的時間,可選,不填則默認(rèn)為0。 說明: 1>強制運行調(diào)用join方法的線程,在該線程啟動后的millis毫秒內(nèi),其它線程無法運行。 2>如果millis的值為0,則表示在該線程運行期間,其它線程無法運行,必須等到該線程結(jié)束后其它線程才可以運行。 3>join(long)方法是在內(nèi)部調(diào)用wait(long)方法來實現(xiàn)的等待效果。 3)setDaemon(): public final void setDaemon(boolean on) 說明:將該線程標(biāo)記為后臺線程,該方法必須在啟動線程(start()方法)前調(diào)用,否則報IllegalThreadStateException異常。 補充: 后臺線程:處于后臺運行,任務(wù)是為其他線程提供服務(wù)。也稱為“守護(hù)線程”或“精靈線程”。JVM的垃圾回收就是典型的后臺線程。 特點: 1>若所有的前臺線程都死亡,后臺線程自動死亡。 2>前臺線程創(chuàng)建的線程默認(rèn)是前臺線程。 isDaemon(): public final boolean isDaemon() 說明:判斷是否為后臺線程: 4)sleep(): public static void sleep(long millis) throws InterruptedException 說明:讓當(dāng)前正在執(zhí)行的線程休眠(暫停)指定的毫秒數(shù),進(jìn)入阻塞狀態(tài) 比較:Thread.sleep()與Object.wait()二者都可以暫停當(dāng)前線程,釋放CPU控制權(quán),主要的區(qū)別在于Object.wait()在釋放CPU同時,釋放了持有的對象鎖。 5)yield(): public static void yield() 說明:暫停當(dāng)前正在執(zhí)行的線程對象,并執(zhí)行其他線程,即線程禮讓。 注意:暫停當(dāng)前線程,但不會阻塞該線程,而是讓其進(jìn)入就緒狀態(tài)。故完全有可能:某個線程調(diào)用了yield()之后,線程調(diào)度器又把他調(diào)度出來重新執(zhí)行。 6)interrupt(): 說明: 1)每個線程都有一個boolean類型的中斷標(biāo)志,當(dāng)一個線程調(diào)用interrupt()方法時,線程的中斷標(biāo)志將被設(shè)為true,此時線程處于中斷狀態(tài)。 2)調(diào)用線程的interrupt()方法只是將線程的中斷標(biāo)記設(shè)為了true,并不會中斷一個正在運行的線程。 3)如果在程序中沒有去檢測線程的中斷標(biāo)志,那么即使將線程的中斷標(biāo)志設(shè)為true,線程也一樣照常運行。 應(yīng)用: 1)當(dāng)線程調(diào)用Thread.sleep()、Thread.join()、object.wait()等方法,都會使當(dāng)前線程進(jìn)入到阻塞狀態(tài)。 2)如果此時(線程處于阻塞狀態(tài))調(diào)用interrupt()方法將線程中斷,則處于阻塞狀態(tài)的線程會拋出一個異常,并且將線程的中斷狀態(tài)清除掉,這樣就可以讓線程退出阻塞狀態(tài)了。 3)Thread.sleep()、Thread.join()、object.wait()等方法的實現(xiàn)中,都包含了對線程中斷標(biāo)識的檢測:如果發(fā)現(xiàn)中斷標(biāo)志為true則拋出異常并且將中斷標(biāo)志位設(shè)置為false。 isInterrupted(): public boolean isInterrupted() 說明:測試線程是否已經(jīng)中斷,不清除線程的中斷狀態(tài)。 eg:thread.isInterrupted(); 判斷thread指向的線程對象是否為中斷狀態(tài)。 interrupted(): public static boolean interrupted() 說明:測試當(dāng)前線程是否已經(jīng)中斷,并,即將線程的中斷標(biāo)識設(shè)為false。 eg:thread.interrupted(); 判斷調(diào)用thread.interrupted();語句的線程(即當(dāng)前線程)是否為中斷狀態(tài)。 7)stop(): [@Deprecated](https://my.oschina.net/jianhuaw) public final void stop() 說明:終止線程,馬上讓線程停止運行,并釋放該線程所持有的鎖!導(dǎo)致數(shù)據(jù)得不到同步的處理,可能出現(xiàn)數(shù)據(jù)不一致的問題。 補充:其它停止線程的方法; 1>手動拋出異常來停止線程(推薦): 優(yōu)點:在catch塊中可以將捕獲的異常向上拋出,使得線程停止的事件可以向上傳播。 2>使用return停止線程: 使用interrupt()方法與return結(jié)合起來,實現(xiàn)停止線程的功能。 eg:在run方法中:if (this.isInterrupt()) {return;} 8)suspend(): [@Deprecated](https://my.oschina.net/jianhuaw) public final void suspend() 說明: 1>掛起線程,使線程進(jìn)入“阻塞”狀態(tài),在調(diào)用resume()方法前該線程一直處于阻塞狀態(tài)。 2>獨占公共的同步對象,使得其它線程無法訪問公共的同步對象。 3>該方法容易發(fā)生死鎖:調(diào)用suspend()的時候,目標(biāo)線程會停下來,但卻仍然持有在這之前獲得的鎖。如果其它線程想通過resume()方法來恢復(fù)目標(biāo)線程,同時必須使用目標(biāo)線程鎖定的資源,就會造成死鎖。 舉例:當(dāng)一個線程的run()方法中的程序執(zhí)行并進(jìn)入到一個synchronized方法的內(nèi)部時,如果此時該線程調(diào)用suspend()方法被掛起了,那么直到調(diào)用resume()方法被喚醒之前,這個synchronized方法將一直處于“暫?!睜顟B(tài),并且“鎖未被釋放”,其它線程就不能調(diào)用這個方法了。 9)resume(): [@Deprecated](https://my.oschina.net/jianhuaw) public final void resume() 說明:恢復(fù)線程,恢復(fù)被suspend方法掛起的線程 注意:suspend()與resume()容易導(dǎo)致死鎖,故應(yīng)該使用鎖對象調(diào)用wait()和notify()的機(jī)制來代替suspend()和resume()來控制線程。 10)getName()/setName(): 說明:獲取/設(shè)置線程的名稱 注意:第一個子線程默認(rèn)的名字:Thread-0
以上就是線程類Thread中的方法是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。