Java 标准库 API 系列之 StampedLock
在学习蚂蚁金服实现的Raft算法实现sofa-jraft项目中第一次接触到这个锁。jraft使用StampedLock来实现对于raft group 的路由信息的线程安全。 StampedLock是Java 8中引入的新的锁机制,它支持三种模式的访问控制,分别是读模式、写模式和乐观读模式,它可以在高并发的情况下提供更好的性能和吞吐量。 在StampedLock中,每个线程都需要获取一个戳(stamp)来进行读或写操作,这个戳是一个64位的数字,其中高16位代表一个版本号,低48位代表一个序号。线程可以使用tryOptimisticRead()方法来获取一个乐观读锁,这种方式不会阻塞线程,只是获取一个戳,如果获取到的戳发生了变化,就意味着有其他线程已经修改了共享资源,这时候需要重新获取锁。 StampedLock还支持读锁和写锁。读锁是共享锁,多个线程可以同时持有读锁,并发地读取共享资源,而写锁是独占锁,只有一个线程可以持有写锁,其他线程需要等待写锁释放才能继续执行。 StampedLock的优势在于,对于读多写少的场景,使用乐观读锁可以避免大量线程阻塞,提高系统的吞吐量;对于写操作比....