java中的synchronized關鍵字的理解

2021-05-27 07:47:10 字數 852 閱讀 3471

●首先是synchronized關鍵字的作用域可以有兩種:

・某個物件例項內

synchronized amethod(){}可以防止多個執行緒同時訪問這個物件的synchronized方法(如果乙個物件有多個synchronized方法,只要乙個線 程訪問了其中的乙個synchronized方法,其它執行緒不能同時訪問這個物件中任何乙個synchronized方法)

・某個類的範圍

synchronized static astaticmethod{}防止多個執行緒同時訪問這個類中的synchronized static 方法

●synchronized關鍵字是不能繼承的

●要注意的事項

・無論synchronized關鍵字加在方法上還是物件上,它取得的鎖都是物件,而不是把一段**或函式當作鎖――而且同步方法很可能還會被其他執行緒的物件訪問

・每個物件只有乙個鎖(lock)與之相關聯

・實現同步是要很大的系統開銷作為代價的,甚至可能造成死鎖,所以盡量避免無謂的同步控制

●對共享資源的同步訪問更加安全的技巧

・定義private 的instance變數+它的 get方法,而不要定義public/protected的instance變數。如果將變數定義為public,物件在外界可以繞過同步方法的控制而直接取得它,並改動它。

・如果instance變數是乙個物件,如陣列或arraylist什麼的,那上述方法仍然不安全,因為當外界物件通過get方法拿到這個instance物件的引用後,又將其指向另乙個物件,那麼這個private變數也就變了,豈不是很危險。 這個時候就需要將get方法也加上synchronized同步,並且,只返回這個private物件的clone()――這樣,呼叫端得到的就是物件副本的引用了。

java中的lock和synchronized區別

1 reentrantlock 擁有synchronized相同的併發性和記憶體語義,此外還多了 鎖投票,定時鎖等候和中斷鎖等候 執行緒a和b都要獲取物件o的鎖定,假設a獲取了物件o鎖,b將等待a釋放對o的鎖定,如果使用 synchronized 如果a不釋放,b將一直等下去,不能被中斷 如果 使用...

Delphi中多執行緒中Synchronize的運用

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

鎖的分類以及相關講解與synchronized區別

1.鎖的分類 2.深入理解lock介面 lock的使用 lock與synchronized的區別 lock 獲取鎖與釋放鎖的過程,都需要程式設計師手動的控制 lock用的是樂觀鎖方式。所謂樂觀鎖就是,每次不加鎖而是假設沒有衝突而去完成某項操作,如果因為衝突失敗就重試,直到成功為止。樂觀鎖實現的機制就...