上篇部落格沒寫好,排版改了好多次,看著實在頭疼所以就沒準備往下寫了,今天講下同步使用到的關鍵字synchronized,這個關鍵字可以是用在方法上,也可以使用再**塊上,
synchronized作用在方法上,它的鎖物件是當前例項物件
public class syncthreadtest implements runnable啟動10個執行緒去搶100張票/*** 同步在方法上
*/private synchronized void
sale() catch (interruptedexception e)
log.e("hahaha"
,thread.currentthread().getname()+"
在買第"+ticker--+"
票");
} }
}}
syncthreadtest stt = new syncthreadtest();這個鎖物件其實就syncthreadtest例項物件,for(int i=0
;i<10
;i++)
如果同步在**塊上:它的鎖是任意物件
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命令,在一組執...