Java读写锁

本是古典 何须时尚 2022-06-13 10:08 269阅读 0赞
  1. import java.util.concurrent.locks.ReentrantReadWriteLock;
  2. class CachedData
  3. {
  4. Object data;
  5. volatile boolean cacheValid;
  6. ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
  7. void processCachedData()
  8. {
  9. rwl.readLock().lock();
  10. if(!cacheValid)
  11. {
  12. // Must release read lock before acquiring write lock
  13. rwl.readLock().unlock();
  14. rwl.writeLock().lock();
  15. // Recheck state because another thread might have acquired
  16. // write lock and changed state before we did.
  17. if(!cacheValid)
  18. {
  19. data = ...;
  20. cacheValid = true;
  21. }
  22. // Downgrade by acquiring read lock before releasing write lock
  23. rwl.readLock().lock();
  24. rwl.writeLock().unlock(); // Unlock write, still hold read
  25. }
  26. use(data);
  27. rwl.readLock().unlock();
  28. }
  29. }

发表评论

表情:
评论列表 (有 0 条评论,269人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java

    使用读写锁要兼顾性能和安全性 对于共享数据来说,如果说某个方法在访问它的时候,只是去读取,并不更新数据,那是不是就不需要加锁呢?还是需要的,因为如果一个线程读数据的同时,另外

    相关

    读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读。 具有强读者同步和强写者同步两种形式 强