简介
synchronized关键字是解决多线程之间访问资源的同步性,也叫同步锁(悲观锁思想)
废话不多说,直接上例子!!
例子
- synchronized放在方法体内部
源代码:
public void fun1(){
synchronized (this){
System.out.println("fun111111111111111111111111");
}
}
经过编译和反编译之后结果如下(显示获取、释放锁):
monitorenter:代表监视器入口,获取锁
monitorexit:代表监视器出口,释放锁
monitorexit:第二次monitorexit代表发生异常,释放锁
- synchronized放在方法名上
public synchronized static void fun2(){
System.out.println("fun222222222222222222222222222222");
}
public synchronized void fun3(){
System.out.println("fun3333333333333333333333333333333");
}
经过编译和反编译之后结果如下:
当synchronized在方法名上时,会进行 flag 同步标识(隐式获取、释放锁)
- 编译命令:javac 文件名称.java
- 反编译命令:javap -verbose 文件名称.class
希望对您有帮助!