執行緒的sleep yield join 停止方法

2021-09-24 20:45:18 字數 2461 閱讀 2035

1、執行緒休眠 sleep(long time) 單位為毫秒

執行緒休眠指的是讓執行緒暫緩執行以一下,等到了預計時間之後再恢復執行

sleep方法會讓當前執行緒立即交出cpu,但不會釋放物件鎖,即使當前持有某個物件的的執行緒呼叫sleep方法休眠了,其他執行緒也無法持有該物件;

public class test implements runnable  catch (interruptedexception e) 

system.out.println(thread.currentthread().getname() + "還剩" + ticket-- + "張票");}}

}public static void main(string args)

}

因為sleep不會釋放物件鎖,即使當前執行緒休眠了,其他執行緒也無法拿到該runable物件,當該執行緒休眠結束後,繼續執行;所以該結果圖:

可見,在thread-0執行時,呼叫了sleep,但其他執行緒無法拿到鎖物件;

2、執行緒讓步 yield()

暫停當前正在執行的執行緒物件,並執行其他執行緒(只能讓擁有相同優先順序的執行緒獲取cpu)

當前執行緒不會立即交出cpu,交出時間由系統排程

同樣不會釋放物件鎖,即使當前持有某個物件的的執行緒呼叫yield方法讓步了,其他執行緒也無法持有該物件,等讓步結束後,繼續該執行緒的執行;

4、執行緒停止

1 設定標誌位(無法處理執行緒阻塞時停止的問題)

class mystopthread implements runnable

@override

public void run()

//標誌位flag一旦變為false,就輸出該句

system.out.println("執行緒停止");

}}public class test catch (interruptedexception e) }}

2.呼叫thread類提供的stop方法強行關閉執行緒, 本方法現在已經不推薦使用,因為會產生不完整數

因為是強行關閉,所以可能導致執行到一半就結束了,導致資料變化不一致。

3.呼叫thread類提供的interrupt()方法:

a.若執行緒中沒有使用類似sleep、wait、join時,呼叫此執行緒物件的interrupt方法並不會真正中斷執行緒,只是簡單地將執行緒的狀態置為interrupt而已,我們可以根據此狀態來進一步確定如何處理執行緒

class mythread implements runnable 

@override

public void run()

system.out.println("當前執行緒狀態為:"+bool);

system.out.println(thread.currentthread().getname() + ",i=" + i);

i++;

}system.out.println("執行緒停止");

}}public class test4 catch (interruptedexception e) }}

b.若執行緒中呼叫了阻塞執行緒的方法,如:sleep(),wait(),join()

此時再呼叫執行緒的interrupt方法會丟擲異常interruptedexception , 同時將執行緒狀態還原(isinterrupted=false)

class mytest implements runnable 

@override

public void run()

system.out.println("當前執行緒狀態為:"+bool);

system.out.println(thread.currentthread().getname() + ",i=" + i);

i++;*/

} catch (interruptedexception e)

}system.out.println("執行緒停止");

}}public class test catch (interruptedexception e) }}

多執行緒 執行緒的停止 執行緒的延遲

執行緒的停止 最好是用標誌位的轉換來停止執行緒 例 三個模組 執行緒 執行緒停止方法 主方法 主方法執行到一定條件 呼叫 執行緒停止方法 執行緒停止執行 主方法繼續執行 package lesson thread public class thread stop implements runnabl...

Python執行緒 執行緒的排程 守護執行緒

python執行緒 執行緒的排程 守護執行緒 守護執行緒與普通執行緒寫法上基本麼啥區別,呼叫執行緒物件的方法setdaemon true 則可以將其設定為守護執行緒。在python中建議使用的是thread.demon true 使用這個方法可以檢測資料合法性 守護執行緒使用的情況較少,但並非無用,...

posix執行緒 執行緒的取消

初看這個主題時,覺得實在簡單。在我印象中,執行緒取消的實現通常是宣告乙個全域性變數來代表取消標誌,乙個執行緒在最開始的大while中判斷該標誌是否被設定,如果被設定就跳出迴圈。但是這有乙個問題是,如果程式中有n個執行緒都有可能被取消,那麼我們是否要宣告n個全域性變數來單獨控制它們的取消?posix提...