Java中的同步(synchronization)是指在多線程編程的時候,為了使得多個線程之間協調工作,避免出現競爭狀態,使用的一種機制。常見的Java中的同步機制有同步方法和同步代碼塊兩種。
同步方法是指將整個方法都加上了synchronized關鍵字, 同步的是整個方法。同步方法的使用非常簡單,只需要在方法前加上synchronized修飾符即可:
public synchronized void synchronizedMethod(){
...
}
同步代碼塊則是在需要同步的代碼塊前面加上synchronized關鍵字,指定要獲取對象鎖的對象:
synchronized(對象鎖){
...
}
同步代碼塊比同步方法更加靈活。同步代碼塊只同步需要同步的代碼,降低了鎖的粒度,能夠提高程序的運行效率。
同步方法和同步代碼塊在對共享資源進行同步上是一樣的。只要有多個線程操作同一個共享資源的時候就需要同步。不同的是使用同步代碼塊能夠控制鎖的粒度,降低鎖粒度從而提高程序效率。