執行緒基礎操作

2021-09-24 19:34:41 字數 1383 閱讀 6687

直接執行run方法不會另啟執行緒

需要在同步**塊中使用,wait和notify要使用同乙個物件鎖。

執行lock.wait()時,主線程已經拿到物件鎖lock,主線程釋放鎖和cpu執行權,並在物件鎖池中等待其他執行緒將其喚醒。

另一線程b在執行lock.notify()時,也拿到了lock物件鎖,並喚醒鎖池中等待的執行緒。當b退出同步**塊時,釋放鎖。主線程繼續執行。

執行緒a中執行b.join()時,會將執行緒b加入到執行緒中強制執行,執行緒a必須等待執行緒b執行結束才能繼續往下執行。

底層是通過wait/notifyall來實現。當b執行緒執行結束以後,jvm會呼叫notifyall()來喚醒a執行緒。

判斷當前的執行緒是否處於活動狀態。

什麼是活動狀態呢?活動狀態就是執行緒已經啟動且尚未終止。執行緒處於正在執行或準備開始執行的狀態,就認為執行緒是「存活」的。

當前執行緒休眠指定時間。

sleep釋放cpu執行權,但不釋放同步鎖。而wait釋放cpu執行權和同步鎖,使得其他執行緒可以訪問同步**塊。

執行緒中斷。interrupt()會設定該執行緒的中斷狀態位為true,中斷的執行緒結果是死亡、還是等待新的任務或是繼續執行至下一步,就取決於這個程式本身。執行緒會不時地檢測這個中斷標示位,以判斷執行緒是否應該被中斷(中斷標示值是否為true)。它並不像stop方法那樣會中斷乙個正在執行的執行緒。

如果乙個執行緒處在阻塞狀態(如執行緒呼叫了thread.sleep、thread.join、thread.wait等),則該執行緒在檢查中斷標示時如果發現中斷標示為true,則會在這些阻塞方法呼叫處丟擲interruptedexception異常,並且在丟擲異常後立即將執行緒的中斷標示位清除,即重新設定為false。

拋interruptedexception異常後,要不直接丟擲去,要不捕獲後再catch裡重新設定中斷標誌位為true。

放棄cpu執行權,以允許其他相同優先順序的執行緒獲得cpu執行權。

JAVA SE 執行緒基礎操作

構造方法 獲取資訊 獲取物件 獲取狀態 修改資訊 修改狀態 例項 main函式的對應main執行緒 public class test 例項 計算大於某一規定值的質數的執行緒 繼承thread類 class primethread extends thread 重寫run方法 public void...

c 執行緒基礎之原子操作

使用system.threading.interlocked類可以提高執行緒的安全性,具體資料參考msdn http msdn.microsoft.com zh cn library system.threading.interlocked.aspx 一般情況下,在子執行緒內使用i 這樣的方式訪問全...

delphi中檔案以及執行緒操作基礎

這週寫的最後的就是delphi了,簡直沒把我坑死。想找個對列容器,上網查老半天,費老鼻子勁了。想往tobjectlist中新增物件,怎麼改怎麼報錯,最好只好在tlist中新增指標,然後強制轉換。怎麼 往tobjectlist中新增資料我現在還沒解決,所以這不是重點。今天的主要說說delphi中的執行...