溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線程類Thread中的方法是什么

發(fā)布時間:2021-12-17 14:37:26 來源:億速云 閱讀:119 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關線程類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è)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI