jay*_*att 3 java multithreading readwritelock
我读到写锁是独占的,而读锁是共享的,因此无论如何都可以通过多个线程访问处于读锁中的一段代码。如果争用线程没有获取读锁怎么办。无论如何,他们将只阅读。另外,如果获取读锁的线程尝试写一些东西怎么办?
谢谢
在这里复制@Solomon Slow comment,因为它对我个人有帮助:
读锁和写锁是成对出现的:如果线程R持有读锁,它会阻止线程W获取相应的写锁,但不会阻止线程S获取相同的读锁。读取器/写入器锁对允许任意数量的读取器同时“拥有”读取锁,或者允许一个写入器拥有写入锁,但它不允许同时读取器和写入器,并且它决不允许同时有多个作家。
在具有读写的多线程代码的情况下,如果一个线程在读取时忽略获取锁,则由于同时写入而存在读取不一致或垃圾数据的风险。例如,它可以在写入 long 变量时读取 long 变量,并且可以读取旧值的高半部分和新值的低半部分,这意味着它读取的值将是完全垃圾,什么从来没有真正写过。
如果一个有读锁的线程在没有写锁的情况下写,它可能会导致其他读线程以类似的方式读取垃圾数据。