synchroized的几种格式:
对象锁
synchronized同步方法(非静态方法)
格式:
synchronized public void Method(){
/**
Method body
*/
}
作用:
对类的对象进行加锁,保证同一时间只有一个线程可以访问当前方法。
和其他锁的效果:
synchronized(this)同步代码块
格式:
public void Method(){
synchronized (this){
/**
block body
*/
}
}
作用:
对类的对象进行加锁,当两个并发线程访问同一个对象object中的synchronized(this)同步代码块时,保证同一时间只有一个线程可以访问此代码块。
synchronized(非 this 对象)同步代码块
格式:
public Object myobject=new Object();
public void Method(){
synchronized (myobject){
/**
block body
*/
}
}
作用:
不会锁定当前对象,在多个线程持有“对象监视器”为同一个对象(X)的前提下,同一个时间只有一个线程可以执行synchronized(非this对象X)同步代码块中的代码。(非this对象X不能为局部变量)
类锁
synchronized(Object.Class)同步代码块
格式:
class MyObject{
/other things/
public static void Method(){
synchronized(MyObject.class){
}
}
}
作用:
和synchronized同步方法(static静态方法),对类进行加锁,在不同线程访问同一个类的synchronized同步方法(static静态方法)呈现同步效果。
synchronized同步方法(static静态方法)
格式:
synchronized public static void Method(){
/**
Method body
*/
}
作用:
和synchronized(Object.Class)同步代码块作用相同,对类进行加锁,在不同线程访问同一个类的synchronized(Object.Class)同步代码块呈现同步效果。