加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

锁的使 用至关重要

发布时间:2022-12-08 11:28:52 所属栏目:编程 来源:
导读:  独占锁的实现,拥有上面列举的除读写锁之外的所有特性,使用比较简单

  class X {

   // 创建独占锁实例

   private final ReentrantLock lock = new ReentrantLock();

  

  独占锁的实现,拥有上面列举的除读写锁之外的所有特性,使用比较简单
 
  class X {  
 
     // 创建独占锁实例  
 
     private final ReentrantLock lock = new ReentrantLock();  
 
     // ...  
 
     public void m() {  
 
       lock.lock();  // block until condition holds  
 
       try {  
 
         // ... method body  
 
       } finally {  
 
         // 必须要释放锁,unlock与lock成对出现  
 
         lock.unlock()  
 
       }
 
     }  
 
   }
 
  ReentrantReadWriteLock
  读写锁的实现,拥有上面列举的所有特性。并且写锁可降级为读锁,反之不行。
 
  class CachedData {  
 
     Object data;  
 
     volatile boolean cacheValid;  
 
     final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();  
 
     void processCachedData() {  
 
       rwl.readLock().lock();  
 
       if (!cacheValid) {  
 
         // Must release read lock before acquiring write lock  
 
         rwl.readLock().unlock();  
 
         rwl.writeLock().lock();
 
          try {  
 
           // Recheck state because another thread might have  
 
           // acquired write lock and changed state before we did.  
 
           if (!cacheValid) {  
 
             data = ...  
 
             cacheValid = true;  
 
           }  
 
           // Downgrade by acquiring read lock before releasing write lock  
 
           rwl.readLock().lock();  
 
         } finally {
 
           rwl.writeLock().unlock(); // Unlock write, still hold read  
 
         }  
 
       }  
 
       try {  
 
         use(data);  
 
       } finally {  
 
         rwl.readLock().unlock();  
 
       }  
 
     }  
 
   }
 
  StampedLock
  StampedLock也是一种读写锁,提供两种读模式:乐观读和悲观读。乐观读允许读的过程中也可以获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入。
 

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!