多執行緒程式設計之synchronized關鍵字

2021-08-31 18:08:20 字數 1286 閱讀 7900

在android開發中synchronized主要有四種用法。第一是在方法宣告時使用;第二是在對某一**塊時使用;第三是對某一物件使用;第四是對某一類使用。具體的實現**如下:

1.方法宣告時使用

放在範圍操作符(public等)之後,返回型別宣告(void等)之前.這時,執行緒獲得的是成員鎖,即一次只能有乙個執行緒進入該方法,其他執行緒要想在此時呼叫該方法,只能排隊等候,當前執行緒(就是在synchronized方法內部的執行緒)執行完該方法後,別的執行緒才能進入.

例如:public synchronized void synmethod() 

2.對某一**塊使用

synchronized後跟括號,括號裡是變數,這樣,一次只有乙個執行緒進入該**塊.此時,執行緒獲得的是成員鎖.例如:

public int synmethod(int a1)

}3.對某一物件使用

synchronized後面括號裡是一物件,此時,執行緒獲得的是物件鎖.例如:

public class mythread implements runnable 

public void run() }} 

對於3,如果執行緒進入,則得到當前物件鎖,那麼別的執行緒在該類所有物件上的任何操作都不能進行.在物件級使用鎖通常是一種比較粗糙的方法。為什麼要將整個物件都上鎖,而不允許其他執行緒短暫地使用物件中其他同步方法來訪問共享資源?如果乙個物件擁有多個資源,就不需要只為了讓乙個執行緒使用其中一部分資源,就將所有執行緒都鎖在外面。由於每個物件都有鎖,可以如下所示使用虛擬物件來上鎖:

class finegrainlock 

//do something here - but don't use shared resources

synchronized(ylock) 

}public void bar() 

//do something here - but don't use shared resources}}

4.對類使用時

synchronized後面括號裡是類,此時,執行緒獲得的是物件鎖.例如:

class arraywithlockorder

}public long lockorder()

public int array()

}class someclass implements runnable

synchronized(first) 

public void run() 

}對於4,如果執行緒進入,則執行緒在該類中所有操作不能進行,包括靜態變數和靜態方法,實際上,對於含有靜態方法和靜態變數的**塊的同步,我們通常用4來加鎖.

Delphi中多執行緒中Synchronize的運用

delphi中多執行緒用synchronize實現vcl資料同步顯示,delphi中多執行緒用synchronize實現vcl資料同步顯示 概述 vcl實現同步的另一種方法就是呼叫執行緒類的synchronize的過程,此過程需要乙個無引數的procedure,故在此procedure中無法傳遞引數...

多執行緒程式設計之執行緒取消

關鍵 pthread cancel函式傳送 終止訊號 pthread setcancelstate函式 設定終止方式 pthread testcancel函式取消執行緒 另一功能是 設定取消點 1 執行緒取消的定義 一般情況下,執行緒在其主體函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行...

多執行緒程式設計之執行緒的封裝

前人總結出,乙個執行緒安全的class應當滿足的條件 1.從多個執行緒訪問時,其表現出正確的行為,無論作業系統如何排程這些執行緒,無論這些執行緒的執行順序如何交織。2.呼叫端 無需額外的同步或其他協調動作 在寫多執行緒程式時腦子裡要有這樣的意識,下面我總結了幾條比較具體的注意事項。使用多執行緒要考慮...