一些執行緒相關的函式

2021-10-02 19:54:10 字數 1247 閱讀 8313

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...