執行緒中斷 執行緒讓步 執行緒睡眠 執行緒合併

2022-06-18 23:36:14 字數 2764 閱讀 6825

執行緒中斷

執行緒中斷涉及到三個方法,如下:

interrupt()方法用於中斷執行緒,通常的理解來看,只要某個執行緒啟動後,呼叫了該方法,則該執行緒不能繼續執行了,來看個小例子:

執行後,我們發現,執行緒t一直在執行,沒有被中斷。

其實interrupt()方法並不是中斷執行緒的執行,而是為呼叫該方法的執行緒物件打上乙個標記,設定其中斷狀態為true,通過isinterrupted()方法可以得到這個執行緒狀態,我們將上面的程式做乙個小改動:

class mythread extends thread

public void run() }}

public class testinterrupt

}

這樣的話,執行緒被順利的中斷執行了。很多人實現乙個執行緒類時,都會再加乙個flag標記,以便控制線程停止執行,其實完全沒必要,通過執行緒自身的中斷狀態,就可以完美實現該功能。如果執行緒在呼叫 object 類的 wait()、wait(long) 或 wait(long, int) 方法,或者該類的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法過程中受阻,則其中斷狀態將被清除,它還將收到乙個interruptedexception。 我們可以捕獲該異常,並且做一些處理。另外,thread.interrupted()方法是乙個靜態方法,它是判斷當前執行緒的中斷狀態,需要注意的是,執行緒的中斷狀態會由該方法清除。換句話說,如果連續兩次呼叫該方法,則第二次呼叫將返回 false(在第一次呼叫已清除了其中斷狀態之後,且第二次呼叫檢驗完中斷狀態前,當前執行緒再次中斷的情況除外)。

執行緒讓步

執行緒讓步,其方法如下:

執行緒讓步用於正在執行的執行緒,在某些情況下讓出cpu資源,讓給其它執行緒執行,來看乙個小例子:

class mythread extends thread

public void run()

} }}public class testinterrupt

}

從輸出結果可以看到,當某個執行緒(t1或者t2)執行到10次、20次、30次等時,就會馬上切換到另乙個執行緒執行,接下來再交替執行,如此往復。注意,如果存在synchronized執行緒同步的話,執行緒讓步不會釋放鎖(監視器物件)。

執行緒睡眠

執行緒睡眠涉及到兩個方法,如下:

執行緒睡眠的過程中,如果是在synchronized執行緒同步內,是持有鎖(監視器物件)的,也就是說,執行緒是關門睡覺的,別的執行緒進不來,來看乙個小例子:

class service catch (interruptedexception e) 

system.out.println(thread.currentthread().getname()+"醒了準備計算");

system.out.println(thread.currentthread().getname()+"計算完成"); }}

class mythread extends thread

public void run()

}public class testinterrupt

}

輸出結果:

mythread2準備計算

mythread2累了睡覺

mythread2醒了準備計算

mythread2計算完成

mythread1準備計算

mythread1累了睡覺

mythread1醒了準備計算

mythread1計算完成

執行緒合併

執行緒合併涉及到三個方法,如下:

執行緒合併是優先執行呼叫該方法的執行緒,再執行當前執行緒,來看乙個小例子:

class mythread extends thread

public void run() }}

public class testinterrupt

}

t1和t2都執行完才繼續主線程的執行,所謂合併,就是等待其它執行緒執行完,再執行當前執行緒,執行起來的效果就好像把其它執行緒合併到當前執行緒執行一樣。

執行緒優先順序

執行緒最低優先順序為1,最高優先順序為10,看起來就有10個級別,但這10個級別能不能和cpu對應上,還未可知,thread類中提供了優先順序的三個常量,如下:

我們建立執行緒物件後,如果不顯示的設定優先順序的話,預設為5。優先順序可以看成一種特權,優先順序高的,獲取cpu排程的機會就大,優先順序低的,獲取cpu排程的機會就小,這個和我們現實生活很一樣啊,優勝劣汰。執行緒優先順序的示例就不寫了,比較簡單。

wait()和sleep()區別:

他們最大本質的區別是:sleep()不釋放同步鎖,wait()釋放同步鎖

多執行緒 執行緒中中斷執行緒的方法

public class threaddemo13 catch interruptedexception e system.out.println 交易終止 t1.start thread.sleep 2000 system.out.println 有內鬼終止交易 flag true public ...

中斷執行緒 interrupt

呼叫interrupt 通知執行緒應該中斷 1 如果執行緒處於阻塞狀態,則執行緒立即退出被阻塞狀態,並丟擲乙個interruptedexception異常 2 如果執行緒處於正常活動狀態,那 package com.mall.controllor.alene import sun.managemen...

執行緒控制 阻塞 睡眠 讓步

1 join執行緒 當乙個執行緒需要等待另乙個執行緒執行完畢再執行的話,就呼叫join方法,例如,執行緒 a b a要等b執行完再執行,則在a執行時要呼叫b的join方法,使a進入阻塞狀態,當b執行完之後再執行a public class myrunnable implements runnable...