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