1、synchronized修饰static变量
如下所示代码:
public class synchronizedDemo1(){
public synchronized static void foo1(){}
public synchronized static void foo2(){}
}
如果系统调用这个类里面的两个方法,如果是调用同一对象,两个方法掉用互斥,如果是多个不同线程之间的调用也是互斥的;
2、synchronized修饰一般一般函数
如下所示代码:
public class synchronizedDemo2(){
public synchronized void foo1(){}
public synchronized void foo2(){}
}
如果系统调用这个类里面的两个方法,如果是调用同一对象,两个方法掉用互斥,如果是多个不同线程调用同一对象之间的调用也是互斥,如果实例化多个对象,对象间是不互斥的;
3、synchronized修饰this方法
如下所示代码:
public class synchronizedDemo3(){
public void foo1(){
synchronized(this){
....
}
}
public synchronized void foo2(){
synchronized(synchronizedDemo3.class){
....
}
}
}
在这个例子中,synchronized(this)的功效相当于public synchronized void foo1(){},就是在成员变量前添加synchronized 这个是同一对象互斥;
synchronized(synchronizedDemo3.class) 就是相当于静态成员变量前添加synchronized 是对这个类实例出的所有对象互斥。