synchronized的锁升级
时间: 2023-12-07 14:36:09 浏览: 90
Synchronized_锁升级知识点总结
synchronized锁升级是指在Java中,synchronized锁有四种状态:无锁、偏向锁、轻量级锁和重量级锁,这些状态之间会根据线程竞争情况进行转换。具体来说,当一个线程访问一个同步块时,会尝试获取锁,如果锁没有被其他线程占用,则当前线程会获得锁并进入同步块;如果锁已经被其他线程占用,则当前线程会进入阻塞状态,直到锁被释放。在锁的升级过程中,会根据线程竞争情况逐渐升级锁的状态,以提高并发性能。
具体来说,synchronized锁升级的四种状态如下:
1. 无锁状态:当一个线程访问同步块时,如果没有其他线程竞争,则该线程会直接获得锁,进入同步块。
2. 偏向锁状态:当一个线程访问同步块时,如果没有其他线程竞争,则该线程会获得偏向锁,并将对象头中的线程ID设置为自己的ID。这样,在下一次访问同步块时,该线程就可以直接获得锁,而不需要再次竞争。
3. 轻量级锁状态:当一个线程访问同步块时,如果发现其他线程正在竞争锁,则该线程会尝试使用CAS操作将对象头中的锁标志位设置为“锁定”状态,并将锁的持有者线程ID记录在对象头中。如果CAS操作成功,则该线程获得锁并进入同步块;否则,该线程会进入自旋状态,尝试重新获取锁。
4. 重量级锁状态:当一个线程访问同步块时,如果发现其他线程正在竞争锁,并且自旋次数超过一定阈值,则该线程会将锁升级为重量级锁。在重量级锁状态下,线程会进入阻塞状态,直到锁被释放。
阅读全文