C Tip 如何優雅的控制線程狀態

2021-05-24 11:03:03 字數 486 閱讀 2917

先問讀者乙個問題,如果想控制乙個執行緒(thread)掛起,繼續,結束你會優先選擇如何處理?

從面試的經驗來看,多數的面試者都會說thread不是提供了suspend,resume,abort等方法嗎,直接呼叫就好了,簡單快捷.但很多情況下簡單就是美只是乙個謊言而已.

suspend和resume方法已經被ms標註過時(obsolete),不建議使用者使用,ms同時推薦通過同步控制來管理執行緒狀態.

再問讀者乙個問題,如果控制乙個執行緒池中的執行緒的掛起,繼續,結束你會優先選擇如何處理?

也許有人會說,既然沒法用api了,那我定義一些標誌量,來做狀態控制不就可以了嗎?

確實,說起來很簡單.那麼變數的值需不需要考慮由於多執行緒問題導致的讀寫問題呢,你會怎麼處理?

如果不用標誌量,可以用同步事件來做,會不會跟優雅一些呢?

讓我把傳統的方式以及使用同步方式做的控制都寫一遍,讓讀者來做取捨吧.

**如下,注釋也比較全,就不再累述細節.

如何控制線程執行的順序?

public class myservice for int i 0 i 2 i ordernum 2 notifyall catch interruptedexception e public synchronized void methodb for int i 0 i 2 i ordernum...

如何控制線程執行的順序?

1 如何控制線程執行的順序?有三個執行緒,讓這三個執行緒按照我們指定的順序執行!答 1.join 方法 讓主線程等待其他執行緒執行完成之後執行。讓主線程放棄cpu的控制權,等待呼叫join方法的執行緒執行完成之後再執行!join 方法底層呼叫的wait 方法,是讓主線程等待其他執行緒執行完成之後執行...

控制線程的方法

控制線程的方法有join sleep 休眠 yield 讓步 suspend 掛起 resume 恢復 簡單的測試下sleep 和yield 並說明執行緒在這兩種狀態下對cpu的持有狀態和對同步鎖的持有狀態 在這裡不貼出程式執行的結果,大家可以根據 在自己的機器上跑一 會一下我接下來要闡述的,這要看...