分类:
Java编程开发中的锁分为两类:锁和轻量级锁。
概述:
锁是一种传统的同步机制,它通过阻止多个线程同时访问共享资源的方式来实现同步。这种锁的特点在于它可以保证多个线程的安全访问,但是它也有一定的开销,因为它会消耗大量的CPU资源。
轻量级锁是一种更高效的同步机制,它可以有效地消除锁带来的性能开销。它使用乐观锁的思想,在对共享资源进行修改时,会检查该资源是否可以被其他线程修改,如果可以,则修改;如果不可以,则等待直到可以修改为止。这种锁的特点是可以有效减少性能开销,提升程序的运行效率
特点:
Java中的偏向锁和轻量级锁是Java虚拟机提供的两种优化手段,旨在减少线程竞争和提高并发性能。它们的特点如下:
偏向锁(Biased Locking):偏向锁是一种针对无竞争场景的优化,它的特点是假设在未来大多数情况下,锁只会被一个线程反复获取和释放。在这种情况下,将锁对象标记为偏向锁,并将线程ID记录在锁对象头中,使得在该线程获取锁时可以快速地获得锁,而无需进行同步操作。如果有其他线程尝试获取锁,则偏向锁会被撤销,变成轻量级锁。
轻量级锁(Lightweight Locking):轻量级锁是一种针对短时间竞争的优化,它的特点是采用CAS操作(Compare And Swap)在用户态下进行同步,避免了线程阻塞和内核态与用户态的切换。当线程尝试获取轻量级锁时,如果该锁未被其他线程占用,则将锁对象标记为轻量级锁,并将当前线程ID记录在锁对象头中;如果有其他线程尝试获取同一把锁,则轻量级锁会自动膨胀为重量级锁。
总结:
这两种锁的特点是针对不同的场景进行优化的。偏向锁适用于无竞争场景,轻量级锁适用于短时间竞争场景。它们都避免了线程阻塞和内核态与用户态的切换,从而提高了并发性能。