立即学习:https://edu.csdn.net/course/play/26270/326863?utm_source=blogtoedu
编译 javac xx.java
反编译 javap -c -p -v xx.class
反编译结果:
synchronized方法
方法使用有ACC_SYNCHRONIZED标识
如果是static方法,锁作用在类上(串行)
如果非static方法,锁作用在具体类的对象上(并行)相互不影响
synchronized与ReentrantLock
相同点:
都用于资源加多,控制代码同一时间只有单线程在执行
当一个线程获取了锁,其他线程均等待
均是可重入锁
不同点:
synchronized是Java语言关键字,由虚拟机字节码指令实现
ReentrantLock是Java jdk提供的api级别锁实现
synchronized可在方法级别,但ReentrantLock不行
ReentrantLock可通过tryLock等待指定时间的锁,超时返回,synchronized不行
synchronized只有非公平锁,ReentrantLock有公平锁和非公平锁