(1)monitor類(主要是靜態方法)
monitor.enter(obj)//獲得加在物件obj上的鎖
... monitor.exit(obj)
//釋放鎖
//上面兩句之間的**相當於lock(obj)
monitor.tryenter(obj)
//該方法立即返回,如果返回值為false,則接下來不需要monitor.exit(obj)。
//以下幾個方法用於執行緒間的互動 ==》 解決同步依賴
monitor.wait(obj)
//等待脈衝訊息。釋放物件上的鎖並阻塞當前執行緒,以後只有其它執行緒呼叫pulse或pulseall時才會給它再次獲得鎖的機會
monitor.pulse(obj)
//發射脈衝訊息( 只有得到鎖後才能發射,而且發射不會自動釋放鎖)
monitor.pulseall(obj)
(3)lock語句
lock(obj)
實現單寫多讀程式的鎖。
acquirereaderlock()//當沒有寫程式執行緒占用鎖時,就可獲得鎖
acquirewriterlock()
//當沒有任何讀寫程式執行緒占用鎖時,才可獲得鎖
releasereaderlock() releasewriterlock()
(5)manualresetevent
set()方法將狀態設定為有訊號 reset()將其設定為無訊號 waitone()將阻塞到其有訊號為止,若呼叫waitone的時刻就是有訊號的,將不會阻塞同步乙個由許多執行緒共享的變數。
decrement(refint
);//
使變數減1
increment(
refint
);//
使變數加1
//以上兩個方法僅針對類int變數
exchange(
refobject
, object
);
二.建立執行緒安全的物件
hashtable h=hashtable.synchronized(
newhashtable()) ;
arraylist等容器也提供類似操作。
**:
多執行緒 使用鎖編寫執行緒安全的程式
對上乙個例子的改進。1 競爭資源 public class student2 設定物件和獲取物件的執行緒 為了展示效果,我們使用了迴圈。public class setthread implements runnable override public void run else x public ...
C 多執行緒 執行緒安全
當使用多執行緒時,可能存在同時訪問乙個變數,導致變數被汙染問題,所以需要通過程式設計克服這個問題。採用多個執行緒,分別記數,然後檢視最終計算結果,如下 include include include 計數全域性變數 long cnt 0 計數程式 void counter int main int ...
C 編寫的多執行緒埠掃瞄程式
using system using system.drawing using system.collections using system.componentmodel using system.windows.forms 增加的如下.using system.data using system...