读锁和写锁共用同一Sync(即AQS,可为公平或非公平)
一个暂时的无锁状态可能是无线程来加锁或者在解锁和加锁的过程中
公平:若已有线程等待,写锁和读锁请求都排队等待
非公平:写锁永远可以竞争(在解锁和加锁间隙时,即便前面有线程等待),竞争失败去排队,若队首节点为写锁请求则读锁排队,否则读锁也可以竞争
state高16位为读锁数量,低16位为写锁重入数,额外有线程本地变量维护读锁重入数
ReadWriteLock
最新推荐文章于 2019-12-19 17:13:04 发布
读锁和写锁共用同一Sync(即AQS,可为公平或非公平)
一个暂时的无锁状态可能是无线程来加锁或者在解锁和加锁的过程中
公平:若已有线程等待,写锁和读锁请求都排队等待
非公平:写锁永远可以竞争(在解锁和加锁间隙时,即便前面有线程等待),竞争失败去排队,若队首节点为写锁请求则读锁排队,否则读锁也可以竞争
state高16位为读锁数量,低16位为写锁重入数,额外有线程本地变量维护读锁重入数