synchronized的幾種加鎖方式

2021-10-11 23:40:04 字數 2245 閱讀 2682

public

class

synchronizedtest

catch

(interruptedexception e)

}public

static

void

main

(string[

] args)).

start()

;new

thread((

)->).

start();}}

此處列舉的是不同例項呼叫的情況 

此處列舉的是同一例項呼叫的情況 

//鎖住了例項中的成員變數

public

void

test3()

catch

(interruptedexception e)}}

public

static

void

main

(string[

] args)).

start()

;new

thread((

)->).

start();}}

同乙個例項物件的成員屬性肯定是同乙個,此處列舉的是不同例項的情況,但是 依舊實現了同步,原因如下:

integer存在靜態快取,範圍是-128 ~ 127,當使用integer a = 127 或者 integer a = integer.valueof(127) 這樣的形式,都是從此快取拿。如果使用 integer a = new integer(127),每次都是乙個新的物件。此例中,兩個物件例項的成員變數 lockobject 其實是同乙個物件,因此實現了同步。還有字串常量池也要注意。所以此處關注是,同步**塊傳參的物件是否是同乙個。這跟第二個方式其實是同一種。

結果如下: 

synchronized的幾種用法

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

Synchronized 的幾種用法

這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例,同步方法鎖將失效。用在普通方法 private synchronized void synchronizedmethod catch interruptedexcepti...

Synchronized的幾種用法

我們都知道 synchronized 是執行緒安全同步用的,大部分程式可能只會用到同步方法上面。其實 synchronized 可以用到更多的場合,棧長列舉了以下幾個用法。這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例...