使用synchronized關鍵字3種使用方法:
創新互聯建站自2013年創立以來,是專業互聯網技術服務公司,擁有項目成都網站設計、網站制作網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元溫宿做網站,已為上家服務,為溫宿各地企業和個人服務,聯系電話:028-86922220
修飾類方法,作用于當前實例加鎖,進入方法要獲取當前實例的鎖
修飾靜態方法,作用于當前實例加鎖,進入方法要獲取當前實例的鎖
修飾代碼塊,指定加鎖對象,給指定對象加鎖,進入代碼塊要先獲取指定對象的鎖(synchronized參數要傳入固定的對象才能起到作用)
使用原子操作:
java 在 SDK atomic包下的提供了原子操作的類,常用的有
AtomicBoolean
AtomicInteger
AtomicIntegerArray
AtomicIntegerFieldUpdater
AtomicLong
AtomicLongArray
AtomicLongfieldUpdater
AtomicMarkableReference
AtomicReference
AtomicReference
AtomicReferenceArray
AtomicReferenceFieldUpdater
AtomicStampedReference
DoubleAccumulator
DoubleAdder
LongAccumulator
LongAdder
Striped64
其中atomicboolean atomicinteger atomicreperence常用的方法及含義
get() 獲取當前值
set()設置當前值
getAndSet(V newValue) 獲取當前值并設置最新的值
compareAndSer(V expect,V update)如果expect與當前值相同就設置update為最新值
多線程同步的實現最終依賴鎖機制。我們可以想象某一共享資源是一間屋子,每個人都是一個線程。當A希望進入房間時,他必須獲得門鎖,一旦A獲得門鎖,他進去后就立刻將門鎖上,于是B,C,D...就不得不在門外等待,直到A釋放鎖出來后,B,C,D...中的某一人搶到了該鎖(具體搶法依賴于JVM的實現,可以先到先得,也可以隨機挑選),然后進屋又將門鎖上。這樣,任一時刻最多有一人在屋內(使用共享資源)。 Java語言規范內置了對多線程的支持。對于Java程序來說,每一個對象實例都有一把“鎖”,一旦某個線程獲得了該鎖,別的線程如果希望獲得該鎖,只能等待這個線程釋放鎖之后。獲得鎖的方法只有一個,就是synchronized關鍵字。
Java語言的關鍵字,當synchronized用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執行該段代碼。
一、當兩個并發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以后才能執行該代碼塊。
二、然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。
三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。
四、第三個例子同樣適用其它同步代碼塊。也就是說,當一個線程訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的對象鎖。結果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞。
五、以上規則對其它對象鎖同樣適用。
分享標題:java鎖修飾代碼塊 java中加鎖
標題網址:http://m.newbst.com/article28/doojijp.html
成都網站建設公司_創新互聯,為您提供網站營銷、網站導航、品牌網站建設、網站策劃、網站設計、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯