併發程式設計 synchronized的初步使用

2021-10-21 12:38:29 字數 2312 閱讀 2646

三、隱式規則

四、選擇合適的鎖

synchronized:內建鎖,又被稱為同步鎖,隱式鎖

當synchronized關鍵字修飾乙個方法或者**塊時,能保證同一時刻最多只有乙個執行緒執行該段**

鎖的是當前例項

/**

* * 測試synchronized鎖this和synchronized修飾方法 是否鎖的同乙個物件

* 如果是說明synchronized修飾方法鎖的是當前類的例項

*/public

class

syncobjectdemo

private

void

inccount02()

}private

static

class

inccount01

extends

thread

@override

public

void

run()}

}private

static

class

inccount02

extends

thread

@override

public

void

run()}

}public

static

void

main

(string[

] args)

throws interruptedexception

}

**執行完成後列印20000,說明兩個執行緒鎖的是同乙個物件,即synchronized鎖this物件和synchronized修飾方法是同樣的效果,也就說明synchronized修飾方法鎖的物件就是當前類的例項

鎖的是括號裡的物件

synchronized

(this

)

鎖的是類的clas物件

***

* 測試synchronized鎖class物件和synchronized修飾靜態方法 是否鎖的同乙個物件

* 如果是說明synchronized修飾靜態方法鎖的是當前類的class物件 */

public

class

syncclassdemo

private

void

inccount02()

}private

static

class

inccount01

extends

thread}}

private

static

class

inccount02

extends

thread

@override

public

void

run()}

}public

static

void

main

(string[

] args)

throws interruptedexception

}

**執行完成後列印20000,說明兩個執行緒鎖的是同乙個物件,即synchronized鎖class物件和synchronized修飾靜態方法是同樣的效果,也就說明synchronized修飾靜態方法鎖的物件就是當前類的class物件

當兩個併發執行緒訪問同乙個物件object中的synchronized(obj)同步**塊時,乙個時間內只能有乙個執行緒得到執行,另外乙個執行緒必須等待當前執行緒執行完這個**塊以後才能執行該**塊

當乙個執行緒訪問object的乙個同步**塊時,另外乙個執行緒可以訪問object中的非同步**塊

當乙個執行緒訪問object的乙個同步**塊時,其他執行緒對object中的所有其他同步**塊的訪問將被阻塞

synchronized不同的寫法程式響應的快慢和對cpu等資源高併發的利用程度也不一樣,效能和執行效率得優劣程度如下

同步方法體 < synchronized(this) < synchronizd(小obj)

同步方法體即使獲得了鎖,進入方法體還得分配資源需要一定的時間

加鎖和釋放鎖都需要加鎖的物件的資源,因此鎖的物件越小越好,開發中常建立乙個小物件作為加鎖物件

例如:

private

byte

lock =

newbyte[1

];public

void

testsync()

}

java併發程式設計之Synchronized關鍵字

1.synchronized關鍵字使用前介紹 1 使用synchronized關鍵字修飾方法,ps 在這裡要特別需要注意的是,當有兩個或者以上執行緒的時候,其中有乙個執行緒獲取了該方法的物件鎖執行同步方法的時候,其他的執行緒仍然可以訪問其他的非使用synchronized的方法,也就是非同步的了。2...

java併發程式設計之synchronized

上篇部落格沒寫好,排版改了好多次,看著實在頭疼所以就沒準備往下寫了,今天講下同步使用到的關鍵字synchronized,這個關鍵字可以是用在方法上,也可以使用再 塊上,synchronized作用在方法上,它的鎖物件是當前例項物件 public class syncthreadtest implem...

併發基礎之一 多執行緒synchronized

public class demo 簡便的寫法一 public void test 簡便的寫法二 public synchronized void test 在這裡的排序也是有講究的,synchronized雖然在 一 二這裡起到的作用相同。但是synchronied如果只需要一部分 需要上鎖,那麼...