Synchronized的大概有4中用法java
1.修飾一個方法,如:this
public synchronized void count(){ }
在這種狀況下,一個對象一次只能有一個線程能夠訪問該方法。若是是類的不一樣實現對象,訪問同一接口不會受到影響。若是該類中有多個方法都添加了synchronized方法,則一個對象調用其中一個synchronized方法時,該對象的其餘線程不容許調用其餘synchronized方法線程
2.修飾一個代碼塊,如code
public void count(){ synchronized(this){ } }
在這種狀況下,同一個對象,一次只能有一個線程訪問代碼塊中的代碼對象
3.修飾一個靜態方法,如接口
public synchronized static void count(int time){ }
因爲靜態方法是屬於類的,因此該類的全部實現對象,一次只能有一個線程使用該方法class
4.修飾一個類,如方法
public class ThreadSync{ public void count(int time){ synchronized (ThreadSync.class){ } } }
在這種狀況下,該類的全部實現對象,一次只能有一個線程訪問代碼塊中的代碼im