Java 你能用一个原子整数做一个读写锁吗?
如果您使用位掩码将读写锁存储在单个Java 你能用一个原子整数做一个读写锁吗?,java,concurrency,atomic,atomicinteger,Java,Concurrency,Atomic,Atomicinteger,如果您使用位掩码将读写锁存储在单个AtomicInteger中,您能否实现快速ReadWriteLock类 它与常规的可重入写回有什么不同;DR-它不起作用 正如@Radiodef指出的,您将无法实现ReadWriteLockAPI。如果锁的状态只是单个的AtomicInteger,则诸如getOwner、getQueuedThreads等方法是不可实现的 完全重返大气层是无法实现的。重入通常需要对当前持有锁的线程的标识以及每个线程的重入计数进行编码。对于读者,我们可以使用单个计数(没有标识),
AtomicInteger
中,您能否实现快速ReadWriteLock
类
它与常规的可重入写回有什么不同;DR-它不起作用
ReadWriteLock
API。如果锁的状态只是单个的AtomicInteger
,则诸如getOwner
、getQueuedThreads
等方法是不可实现的Thread
确实提供了一个数值id
属性,该属性在线程的生命周期内是唯一的且不变的……但是id
是一个长的)
AtomicInteger
作为锁的状态,则不能将线程停驻在争用锁上。(为了使停止工作,释放锁的线程需要知道要对哪个线程进行解压。但您不能表示这一点。)这意味着您需要使用spinlocking1,它价格昂贵且不可扩展1-使用spinlocking,等待争用锁的线程“旋转”执行忙循环,直到锁可用。当争用不太可能且持续时间很短时,这对于锁来说是可以的。。。或者当核心无法做任何其他事情时。但是它对于正常使用来说效率太低。要履行
锁的契约
,您至少需要有一个地方来存储对当前持有锁的线程的引用。在Java中,整数是无法做到这一点的。