標籤:illegal 返回 注意 可見 pre 線上 lang 運行 select
休眠線程:
public static void sleep(long millis) throws InterruptedException
在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。該線程不丟失任何監視器的所屬權。
線程加入
public final void join() throws InterruptedException
等待該線程終止。
-
拋出:
InterruptedException - 如果另一個線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除。
-
線程禮讓
-
public static void yield()
暫停當前正在執行的線程對象,並執行其他線程。
讓多個線程的執行更和諧
守護線程
public final void setDaemon(boolean on)
-
將該線程標記為守護線程或使用者線程。當正在啟動並執行線程都是守護線程時,JAVA 虛擬機器退出。
該方法必須在啟動線程前調用。
該方法首先調用該線程的 checkAccess 方法,且不帶任何參數。這可能拋出 SecurityException(在當前線程中)。
-
-
參數:
-
on - 如果為 true,則將該線程標記為守護線程。
-
拋出:
-
IllegalThreadStateException - 如果該線程處於活動狀態。
-
SecurityException - 如果當前線程無法修改該線程。
中斷線程
public final void stop()
-
已淘汰。 該方法具有固有的不安全性。用 Thread.stop 來終止線程將釋放它已經鎖定的所有監視器(作為沿堆棧向上傳播的未檢查
ThreadDeath 異常的一個自然後果)。如果以前受這些監視器保護的任何對象都處於一種不一致的狀態,則損壞的對象將對其他線程可見,這有可能導致任意的行為。stop 的許多使用都應由只修改某些變數以指示目標線程應該停止啟動並執行代碼來取代。目標線程應定期檢查該變數,並且如果該變數指示它要停止運行,則從其運行方法依次返回。如果目標線程等待很長時間(例如基於一個條件變數),則應使用 interrupt 方法來中斷該等待。有關更多資訊,請參閱《為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。
-
強迫線程停止執行。
如果安裝了安全管理器,則以 this 作為其參數調用 checkAccess 方法。這可能引發 SecurityException(在當前線程中)。
如果該線程不同於當前線程(即當前線程試圖終止除它本身以外的某一線程),則安全管理器的 checkPermission 方法(帶有 RuntimePermission("stopThread") 參數)也會被調用。這會再次拋出 SecurityException(在當前線程中)。
無論該線程在做些什麼,它所代表的線程都被迫異常停止,並拋出一個新建立的 ThreadDeath 對象,作為異常。
停止一個尚未啟動的線程是允許的。如果最後啟動了該線程,它會立即終止。
應用程式通常不應試圖捕獲 ThreadDeath,除非它必須執行某些異常的清除操作(注意,拋出 ThreadDeath 將導致 try 語句的 finally 子句線上程正式終止前執行)。如果 catch 子句捕獲了一個 ThreadDeath 對象,則重新拋出該對象很重要,因為這樣該線程才會真正終止。
對其他未捕獲的異常作出反應的頂級錯誤處理程式不會列印輸出訊息,或者另外通知應用程式未捕獲到的異常是否為 ThreadDeath 的一個執行個體。
-
-
拋出:
-
SecurityException - 如果當前線程不能修改該線程。
public void interrupt()
-
中斷線程。
如果當前線程沒有中斷它自己(這在任何情況下都是允許的),則該線程的 checkAccess 方法就會被調用,這可能拋出 SecurityException。
如果線程在調用 Object 類的 wait()、wait(long) 或 wait(long, int) 方法,或者該類的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法過程中受阻,則其中斷狀態將被清除,它還將收到一個 InterruptedException。
如果該線程在可中斷的通道上的 I/O 操作中受阻,則該通道將被關閉,該線程的中斷狀態將被設定並且該線程將收到一個 ClosedByInterruptException。
如果該線程在一個 Selector 中受阻,則該線程的中斷狀態將被設定,它將立即從選擇操作返回,並可能帶有一個非零值,就好像調用了選取器的 wakeup 方法一樣。
如果以前的條件都沒有儲存,則該線程的中斷狀態將被設定。
-
-
拋出:
-
SecurityException - 如果當前線程無法修改該線程
Java多線程-線程式控制制