object類自帶函式
synchronized
(obj)
}
用wait()寫出生產者和消費者模式的乙個小例子:
//生產者執行緒
synchronized
(queue)
catch
(exception e)
}//沒滿,生成元素放入佇列
queue.
add(element)
; queue.
notifyall()
;//喚醒所有其他正在掛起中的執行緒
}//消費者執行緒
synchronized
(queue)
catch
(exception e)
} queue.
take()
; queue.
notifyall()
;}
另外還有wait(long timeout)以及wait(long timeout, int nanos)兩個函式,前者是等待timeout時間後還沒有被喚醒就自己返回(自己喚醒自己),後者是如果nanos>0就把timeout+1(這裡不太明白……看網上資料說什麼可以更好地控制等待時間之類的)
notify()函式隨機喚醒乙個在該共享變數上被掛起的執行緒。也必須拿到共享變數的鎖才可以使用。notifyall()就是喚醒所有該變數上被掛起的執行緒。(注意:只有在呼叫notifyall()之前被掛起的執行緒才會被喚醒)
join()函式:在乙個執行緒(比如主線程main函式)裡呼叫另乙個執行緒a的join()函式,則主線程會被阻塞,等到執行緒a執行完畢再開始往下執行。可以在其他執行緒裡面呼叫主線程的interrupt()來丟擲異常強行中斷。
thread類靜態方法
sleep()函式:它的作用是讓呼叫執行緒讓出執行時間的執行權,不參與cpu排程,但所持有的一切資源包括鎖都不會出讓。如果期間也被呼叫了interrupt()也會拋異常中斷。
yield()函式:讓出自己剩餘的時間片
二者區別:sleep()執行期間,cpu完全不會去排程這個執行緒。但是yield()只是讓出自己剩餘的時間片,也就是說還是有機率cpu下一次仍然排程到這個執行緒。
執行緒相關的一些記錄
1.volatile關鍵字 修飾的變數不會快取在暫存器或者快取在對其他處理器隱藏的地方。因此某執行緒在讀取volatile變數時總會讀取到其他執行緒寫入的新值。不代表多執行緒安全,如果其他執行緒正修改這個變數還沒寫入 完成這個執行緒讀取時仍然讀取的是舊值。2.發布publishing 逸出escap...
注入相關的一些函式
查詢視窗控制代碼 lpclassname 引數可以為 null hwnd findwindowa lpcstr lpclassname,lpcstr lpwindowname hwnd findwindoww lpcwstr lpclassname,lpcwstr lpwindowname 返回程序...
執行緒中的一些函式
在linux下用pcb來模擬的,輕量級程序 作業系統cpu排程的乙個基本單位 是乙個程式的執行線路 int pthread create pthread t thread,id const pthread attr t attr,設定執行緒的屬性,attr為null表 使 預設屬性 void sta...