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中CompletableFuture中4種非同步程式設計方法Java非同步程式設計
- 掌握C#中非同步魔法:同步方法如何優雅呼叫非同步方法C#非同步
- Java多執行緒程式設計筆記2:synchronized同步方法Java執行緒程式設計筆記synchronized
- 非同步處理方法非同步
- 執行緒同步方法執行緒
- JAVA不使用執行緒池來處理的非同步的方法Java執行緒非同步
- java同步非阻塞IOJava
- Java 非同步 I/OJava非同步
- asp.net 應用程式中同步方法呼叫非同步方法無響應解決方法ASP.NET非同步
- java 執行緒安全問題,解決執行緒安全問題——同步程式碼塊,同步方法,Lock鎖,Object類中wait方法,notify方法。等待喚醒案例。Java執行緒ObjectAI
- Java實現非同步呼叫Java非同步
- java 多執行緒 –同步Java執行緒
- java非同步程式設計Java非同步程式設計
- java 多執行緒 --同步Java執行緒
- 生產者消費者模式--java多執行緒同步方法的應用模式Java執行緒
- Java中同步的基本概念監視器–最簡單粗暴的理解方法Java
- 死磕 java同步系列之JMM(Java Memory Model)Java
- 使goroutine同步的方法總結Go
- Linux系統時間同步方法。Linux
- 146.synchronized同步方法與塊synchronized
- win10 怎麼取消同步 win10取消同步方法Win10
- Java同步容器和併發容器Java
- Java中的執行緒同步Java執行緒
- 如何在Java中使用同步 -ManushaJava
- Java 執行緒同步原理探析Java執行緒
- Java 佇列同步器 AQSJava佇列AQS
- Java非同步判斷執行緒池所有任務是否執行完成的方法Java非同步執行緒
- Java方法Java
- Promise-在Java中以同步的方式非同步程式設計PromiseJava非同步程式設計
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- 從同步原語看非阻塞同步以及Java中的應用Java
- spring boot非同步方法@Async踩坑Spring Boot非同步
- Spring Boot 中如何支援非同步方法Spring Boot非同步
- java synchronize - 執行緒同步機制Java執行緒