在java多线程中 synchronized 是非常重要的,也是经常用到的
对于synchronized关键字要注意两点
synchronized对象监视器为Object的时候
synchronized对象监视器为Class的时候
synchronized对象监视器为Object和对象监视器为Class同时存在
例如下面代码
public class A {
static synchronized public void StaticMethodA(){
System.out.println("this is StaticMethodA");
}
static synchronized public void StaticMethodB(){
System.out.println("this is StaticMethodB");
}
static public void StaticMethodC(){
System.out.println("this is StaticMethodC");
}
synchronized public void MethodA(){
System.out.println("this is MethodA");
}
synchronized public void MethodB(){
System.out.println("this is MethodB");
}
public void MethodC(){
System.out.println("this is MethodC");
}
}
创建对象 a 和b
A a = new A();
A b = new A();
当两个线程分别调用 a.MethodA() 和 A.StaticMethodB() 的时候 这两个方法是能同时执行的,因为a.MethodA()执行时synchronized 锁的是a 这个对象,但是A.StaticMethodA() 执行是synchronized锁的是A class,所以a.MethodA() 和 A.StaticMethodB() 能并行,他们不是同一个锁。