Java同步方法
1.即有synchronized關鍵字修飾的方法。
由於java的每個物件都有一個內建鎖,當用此關鍵字修飾方法時,
內建鎖會保護整個方法。在呼叫該方法前,需要獲得內建鎖,否則就處於阻塞狀態。
程式碼如:
public synchronized void save(){}
注: synchronized關鍵字也可以修飾靜態方法,此時如果呼叫該靜態方法,將會鎖住整個類
2.同步程式碼塊
即有synchronized關鍵字修飾的語句塊。
被該關鍵字修飾的語句塊會自動被加上內建鎖,從而實現同步
程式碼如:
synchronized(object){
}
注:同步是一種高開銷的操作,因此應該儘量減少同步的內容。
通常沒有必要同步整個方法,使用synchronized程式碼塊同步關鍵程式碼即可。
- 3.使用特殊域變數(volatile)實現執行緒同步
a.volatile關鍵字為域變數的訪問提供了一種免鎖機制,
b.使用volatile修飾域相當於告訴 虛擬機器該域可能會被其他執行緒更新,
c.因此每次使用該域就要重新計算,而不是使用暫存器中的值
d.volatile不會提供任何原子操作,它也不能用來修飾final型別的變數
注:關於Lock物件和synchronized關鍵字的選擇:
a.最好兩個都不用,使用一種java.util.concurrent包提供的機制,
能夠幫助使用者處理所有與鎖相關的程式碼。
b.如果synchronized關鍵字能滿足使用者的需求,就用synchronized,因為它能簡化程式碼
c.如果需要更高階的功能,就用ReentrantLock類,此時要注意及時釋放鎖,否則會出現死鎖,通常在finally程式碼釋放鎖 。
相關文章
- Java 非同步呼叫方法Java非同步
- 關於java實現同步的方法Java
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- [轉]關於java中的 sychronized 同步方法 與 同步塊的理解JavaZed
- Java執行緒同步的方法--Java免費學習網Java執行緒
- Java 多執行緒同步的五種方法Java執行緒
- 同步方法及同步塊
- java同步與非同步Java非同步
- 同步等待方法
- java同步塊Java
- 掌握C#中非同步魔法:同步方法如何優雅呼叫非同步方法C#非同步
- java 同步鎖(synchronized)Javasynchronized
- Java多執行緒程式設計筆記2:synchronized同步方法Java執行緒程式設計筆記synchronized
- 非同步處理方法非同步
- memcache同步session的方法Session
- 執行緒同步方法執行緒
- Java 非同步 I/OJava非同步
- java同步非阻塞IOJava
- Java—執行緒同步Java執行緒
- 轉:Java同步技術Java
- JAVA不使用執行緒池來處理的非同步的方法Java執行緒非同步
- asp.net 應用程式中同步方法呼叫非同步方法無響應解決方法ASP.NET非同步
- es6 用generator進行非同步方法同步非同步
- java 多執行緒 –同步Java執行緒
- Java實現非同步呼叫Java非同步
- Java Collection或Map的同步Java
- java 多執行緒 --同步Java執行緒
- 轉:Java同步技術 (一)Java
- Java 同步機制淺談Java
- java非同步程式設計Java非同步程式設計
- java 執行緒安全問題,解決執行緒安全問題——同步程式碼塊,同步方法,Lock鎖,Object類中wait方法,notify方法。等待喚醒案例。Java執行緒ObjectAI
- 生產者消費者模式--java多執行緒同步方法的應用模式Java執行緒
- Java中同步的基本概念監視器–最簡單粗暴的理解方法Java
- 死磕 java同步系列之JMM(Java Memory Model)Java
- 使goroutine同步的方法總結Go
- [CareerCup] 16.6 Synchronized Method 同步方法synchronized
- .NET非同步方法呼叫的例子非同步