java併發程式設計之synchronized

2021-07-25 22:18:15 字數 1350 閱讀 6975

上篇部落格沒寫好,排版改了好多次,看著實在頭疼所以就沒準備往下寫了,今天講下同步使用到的關鍵字synchronized,這個關鍵字可以是用在方法上,也可以使用再**塊上,

synchronized作用在方法上,它的鎖物件是當前例項物件

public class syncthreadtest implements runnable

/*** 同步在方法上

*/private synchronized void

sale() catch (interruptedexception e)

log.e("hahaha"

,thread.currentthread().getname()+"

在買第"+ticker--+"

票");

} }

}}

啟動10個執行緒去搶100張票

syncthreadtest stt = new syncthreadtest();

for(int i=0

;i<10

;i++)

這個鎖物件其實就syncthreadtest例項物件,

如果同步在**塊上:它的鎖是任意物件

package com.test;

import

android.util.log;

/*** created by admin on 2017/1/10.

*/public class syncthreadtest implements runnable

/*** 同步在方法上

*/private void

sale() catch (interruptedexception e)

log.e("hahha"

,thread.currentthread().getname()+"

在買第"+ticker--+"

票");

} }}}

}

這是同步**塊,這個一定要注意**塊的範圍,也就是那些該同步,那些不改同步,上面的同步**塊中使用的鎖也是例項物件本身,

還有就是靜態方法使用鎖問題?

因為在靜態方法中不能使用this作為鎖物件,因此一般都使用類名.class作為鎖物件,因為它在jvm載入的時候就被類載入器載入到記憶體中,

使用synchronized的前提條件

1:必須是多個執行緒搶占同乙個資源

2:這個資源必須是成員屬性,比如區域性變數什麼的可肯定不行

3:要想保持執行緒安全就必須使用鎖物件要保持一致

執行緒安全的弊端

1:因為加入了鎖機制,所以每次都必須去判斷鎖是否釋放,這也是要消耗資源的,所以降低了效率

java併發程式設計之Exchanger

exchanger v 可以交換的物件型別 可以在對中對元素進行配對和交換的執行緒的同步點。每個執行緒將條目上的某個方法呈現給 exchange 方法,與夥伴執行緒進行匹配,並且在返回時接收其夥伴的物件。exchanger 可能被視為 synchronousqueue 的雙向形式。exchanger...

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

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

Java併發程式設計之CyclicBarrier

cyclicbarrier是乙個同步工具類,它允許一組執行緒互相等待,直到到達某個公共屏障點。與countdownlatch不同的是該barrier在釋放等待執行緒後可以重用,所以稱它為迴圈 cyclic 的屏障 barrier cyclicbarrier支援乙個可選的runnable命令,在一組執...