yield()只是使當前執行緒重新回到runnable狀態
sleep()會讓出cpu,不會釋放鎖
join()會讓出cpu,釋放鎖
wait() 和 notify() 方法與suspend()和 resume()的區別在於wait會釋放鎖,suspend不會釋放鎖
wait() 和 notify()只能執行在synchronized**塊中,因為wait()需要釋放鎖,如果不在同步**塊中,就無鎖可以釋放
當執行緒呼叫wait()方法後會進入等待佇列(進入這個狀態會釋放所占有的所有資源,與阻塞狀態不同),
進入這個狀態後,是不能自動喚醒的,必須依靠其他執行緒呼叫notify()或notifyall()方法才能被喚醒
1、corepoolsize 要保留在池中的執行緒數,也就是執行緒池核心池的大小;
2、maximumpoolsize 最大執行緒數;
3、keepalivetime 當執行緒數大於核心時,此為終止前多餘的空閒執行緒等待新任務的最長時間;
4、unit keepalivetime 引數的時間單位;
5、workqueue 用來儲存等待執行任務的佇列;
6、threadfactory 執行緒工廠;
7、handler 預設的拒絕執行處理程式。
1、corepoolsize:指定了執行緒池中的執行緒數量;
2、maximumpoolsize:指定了執行緒池中的最大執行緒數量;
3、keepalivetime:當前執行緒池數量超過 corepoolsize 時,多餘的空閒執行緒的存活時間,即多次時間內會被銷毀;
4、unit:keepalivetime 的單位;
5、workqueue:任務佇列,被提交但尚未被執行的任務;
6、threadfactory:執行緒工廠,用於建立執行緒,一般用預設的即可;
7、handler:拒絕策略,當任務太多來不及處理,如何拒絕任務。
拒絕策略
jdk 內建的拒絕策略如下:
1、abortpolicy : 直接丟擲異常,阻止系統正常執行。
2、callerrunspolicy : 只要執行緒池未關閉,該策略直接在呼叫者執行緒中,執行當前被丟棄的任務。顯然這樣做不會真的丟棄任務,但是,任務提交執行緒的效能極有可能會急劇下降。
3、discardoldestpolicy : 丟棄最老的乙個請求,也就是即將被執行的乙個任務,並嘗試再次提交當前任務。
4、discardpolicy : 該策略默默地丟棄無法處理的任務,不予任何處理。如果允許任務丟失,這是最好的一種方案。
5、以上內建拒絕策略均實現了 rejectedexecutionhandler 介面,若以上策略仍無法滿足實際需要,完全可以自己擴充套件 rejectedexecutionhandler 介面。
多程序使用pthread mutex
pthread的mutex通常用在多執行緒的同步當中,至於多程序的同步,一直以為只能使用記錄鎖和訊號量,而這兩種機制都需要核心的支援,屬於 重量級 部件。也曾經在多程序同步中使用pthread mutex,但前提有兩個 mutex能為多個程序所見,使mutex物件駐留在共享記憶體中 mutex本身不...
多程序使用pthread mutex
pthread的mutex通常用在多執行緒的同步當中,至於多程序的同步,一直以為只能使用記錄鎖和訊號量,而這兩種機制都需要核心的支援,屬於 重量級 部件。也曾經在多程序同步中使用pthread mutex,但前提有兩個 mutex能為多個程序所見,使mutex物件駐留在共享記憶體中 mutex本身不...
linux多程序使用
init程序是所有程序的父或者祖父 程序的組成 使用者 id cpu時間片 記憶體 狀態 時鐘 優先順序 源程式 fd 程序的狀態 man ps process state codes r 執行或可執行 d 不可中斷睡眠 s 可中斷睡眠 t 掛起 暫停 等待 x 死亡 z 殭屍 已經結束但依然佔據程...