在java多线程中 synchronized 是非常重要的,也是经常用到的
对于synchronized关键字要注意两点
synchronized对象监视器为Object的时候
synchronized对象监视器为Class的时候
对象监视器为CLASS
例如下面代码
public class A {
static synchronized public void MethodA(){
System.out.println("this is static MethodA");
}
static synchronized public void MethodB(){
System.out.println("this is static MethodB");
}
static public void MethodC(){
System.out.println("this is static MethodC");
}
}
当两个线程分别调用 A.MethodA() 和 A.MethodB() 的时候 这两个方法是不能同时执行的,因为synchronized 锁的是A 这个class,A 里面被synchronized 关键字标记的方法只能串行,也就是同一时间只有一个synchronized 标记的方法能运行。A.MethodA() 运行 A.MethodB()就要等待,
但A.MethodC()可以运行,因为MethodC没有被标记,属于非线程安全。不受关键字影响。