1.准备(idea设置tool查看字节码)
settings --> tools --> External Tools
Program C:\Program Files\Java\jdk1.7.0_79\bin\javap.exe
Parameters -c $FileClass$
Working directory $OutputPath$
2.字节码分析
# synchronized
synchronized (SynchronizedDemo.class) {
}
11: monitorenter
12: aload_2
13: monitorexit
仔细分析就会发现 其实就是调用UNSAFE的monitorEnter(加锁)和monitorExit(解锁)方法
# lock
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
System.out.println("test lock");
} catch (Exception e) {
} finally {
lock.unlock();
}
9: invokevirtual #4 // Method java/util/concurrent/locks/ReentrantLock.lock:()V
12: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;
15: ldc #6 // String test lock
17: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
20: aload_1
21: invokevirtual #8 // Method java/util/concurrent/locks/ReentrantLock.unlock:()V
其实它的加锁解锁都是在调用虚拟方法