- 简单了解:
- 对共享资源进行加锁,防止多线程出现并发安全问题。
- jvm(操作系统)层面上实现的加锁,解锁。
- 底层原理实现:
- monitorenter指令,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。
- monitorexit指令,将锁计数器设为 0,表明锁被释放。如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。
- 两个指令的本质是:对对象监视器 monitor 的获取。
- 使用demo:
- 对静态方法和代码块使用,是给Class上锁。
- 对普通方法使用,是给实例对象上锁。