您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關線程類Thread中的方法是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1)currentThread(): public static Thread currentThread() 說明:返回當前正在執(zhí)行的線程對象的引用,即返回調用當前代碼的線程對象。
2) join(): public final void join(long millis) throws InterruptedException 參數(shù):等待的時間,可選,不填則默認為0。 說明: 1>強制運行調用join方法的線程,在該線程啟動后的millis毫秒內,其它線程無法運行。 2>如果millis的值為0,則表示在該線程運行期間,其它線程無法運行,必須等到該線程結束后其它線程才可以運行。 3>join(long)方法是在內部調用wait(long)方法來實現(xiàn)的等待效果。 3)setDaemon(): public final void setDaemon(boolean on) 說明:將該線程標記為后臺線程,該方法必須在啟動線程(start()方法)前調用,否則報IllegalThreadStateException異常。 補充: 后臺線程:處于后臺運行,任務是為其他線程提供服務。也稱為“守護線程”或“精靈線程”。JVM的垃圾回收就是典型的后臺線程。 特點: 1>若所有的前臺線程都死亡,后臺線程自動死亡。 2>前臺線程創(chuàng)建的線程默認是前臺線程。 isDaemon(): public final boolean isDaemon() 說明:判斷是否為后臺線程: 4)sleep(): public static void sleep(long millis) throws InterruptedException 說明:讓當前正在執(zhí)行的線程休眠(暫停)指定的毫秒數(shù),進入阻塞狀態(tài) 比較:Thread.sleep()與Object.wait()二者都可以暫停當前線程,釋放CPU控制權,主要的區(qū)別在于Object.wait()在釋放CPU同時,釋放了持有的對象鎖。 5)yield(): public static void yield() 說明:暫停當前正在執(zhí)行的線程對象,并執(zhí)行其他線程,即線程禮讓。 注意:暫停當前線程,但不會阻塞該線程,而是讓其進入就緒狀態(tài)。故完全有可能:某個線程調用了yield()之后,線程調度器又把他調度出來重新執(zhí)行。 6)interrupt(): 說明: 1)每個線程都有一個boolean類型的中斷標志,當一個線程調用interrupt()方法時,線程的中斷標志將被設為true,此時線程處于中斷狀態(tài)。 2)調用線程的interrupt()方法只是將線程的中斷標記設為了true,并不會中斷一個正在運行的線程。 3)如果在程序中沒有去檢測線程的中斷標志,那么即使將線程的中斷標志設為true,線程也一樣照常運行。 應用: 1)當線程調用Thread.sleep()、Thread.join()、object.wait()等方法,都會使當前線程進入到阻塞狀態(tài)。 2)如果此時(線程處于阻塞狀態(tài))調用interrupt()方法將線程中斷,則處于阻塞狀態(tài)的線程會拋出一個異常,并且將線程的中斷狀態(tài)清除掉,這樣就可以讓線程退出阻塞狀態(tài)了。 3)Thread.sleep()、Thread.join()、object.wait()等方法的實現(xiàn)中,都包含了對線程中斷標識的檢測:如果發(fā)現(xiàn)中斷標志為true則拋出異常并且將中斷標志位設置為false。 isInterrupted(): public boolean isInterrupted() 說明:測試線程是否已經中斷,不清除線程的中斷狀態(tài)。 eg:thread.isInterrupted(); 判斷thread指向的線程對象是否為中斷狀態(tài)。 interrupted(): public static boolean interrupted() 說明:測試當前線程是否已經中斷,并,即將線程的中斷標識設為false。 eg:thread.interrupted(); 判斷調用thread.interrupted();語句的線程(即當前線程)是否為中斷狀態(tài)。 7)stop(): [@Deprecated](https://my.oschina.net/jianhuaw) public final void stop() 說明:終止線程,馬上讓線程停止運行,并釋放該線程所持有的鎖!導致數(shù)據(jù)得不到同步的處理,可能出現(xiàn)數(shù)據(jù)不一致的問題。 補充:其它停止線程的方法; 1>手動拋出異常來停止線程(推薦): 優(yōu)點:在catch塊中可以將捕獲的異常向上拋出,使得線程停止的事件可以向上傳播。 2>使用return停止線程: 使用interrupt()方法與return結合起來,實現(xiàn)停止線程的功能。 eg:在run方法中:if (this.isInterrupt()) {return;} 8)suspend(): [@Deprecated](https://my.oschina.net/jianhuaw) public final void suspend() 說明: 1>掛起線程,使線程進入“阻塞”狀態(tài),在調用resume()方法前該線程一直處于阻塞狀態(tài)。 2>獨占公共的同步對象,使得其它線程無法訪問公共的同步對象。 3>該方法容易發(fā)生死鎖:調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖。如果其它線程想通過resume()方法來恢復目標線程,同時必須使用目標線程鎖定的資源,就會造成死鎖。 舉例:當一個線程的run()方法中的程序執(zhí)行并進入到一個synchronized方法的內部時,如果此時該線程調用suspend()方法被掛起了,那么直到調用resume()方法被喚醒之前,這個synchronized方法將一直處于“暫?!睜顟B(tài),并且“鎖未被釋放”,其它線程就不能調用這個方法了。 9)resume(): [@Deprecated](https://my.oschina.net/jianhuaw) public final void resume() 說明:恢復線程,恢復被suspend方法掛起的線程 注意:suspend()與resume()容易導致死鎖,故應該使用鎖對象調用wait()和notify()的機制來代替suspend()和resume()來控制線程。 10)getName()/setName(): 說明:獲取/設置線程的名稱 注意:第一個子線程默認的名字:Thread-0
以上就是線程類Thread中的方法是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。