跳到主要内容

请简述ReadWriteLock 和 StampedLock ?

参考答案:

ReadWriteLock和StampedLock都是Java中的锁实现,用于解决多线程并发访问共享资源的问题。

ReadWriteLock是一种允许多个线程同时读取共享资源,但只允许一个线程写入共享资源的锁。它包含两种锁:读锁和写锁。当一个线程获取读锁时,它可以读取共享数据,但不能修改;当一个线程获取写锁时,它可以修改共享数据,同时阻塞其他线程对共享数据的访问。多个线程可以同时获取读锁,但同时只能有一个线程获取写锁。

StampedLock是JDK 1.8中引入的一种锁实现,相对于ReadWriteLock,它可以提供更高的性能。StampedLock支持三种访问模式:读、写和乐观读。它的乐观读锁可以在获取锁之后未发生冲突即释放,从而避免了线程阻塞和唤醒的开销。这使得StampedLock在读多写少的场景下性能更高。然而,如果写操作比较频繁,ReadWriteLock可能更适合,因为StampedLock的乐观读锁耗费的开销比较大。

总的来说,ReadWriteLock和StampedLock都是用于解决多线程并发访问共享资源的问题的锁实现,但它们的设计和使用方式有所不同。ReadWriteLock更适合写操作较频繁的场景,而StampedLock则更适合读操作较频繁的场景。