JAVA并发框架ReentrantLock与Condition

     同步代码与同步代码块可以实现多线程的同步,JAVA并发框架提供另外了一个框架,它也能实现多线程的同步,即是Lock和Condition,Condition和Lock是配合在一起使用,从字面意思上看,Condition是条件锁,有了锁,为什么要引用条件锁呢?原因有两个:
     1.对一个共享资源有读和写的能力,如果读线程或写线程获取了Lock的权力,即有能力进入,但是如果里面没有内容,读也没有用,如果空间已满了,写也写不了,所有还得有条件去判断一下,是不是线程要等待了;
     2.提供一种多线程之间的通信机制,类似wait()和nofity()的原理。

     看一个例子,就会明白了,还是实现上次的那个生产者和消费者的例子。
     我们假设有一个篮子,最多可以放10个苹果,有多个人可以放苹果,也有多个人可以拿走苹果。
public   class  Apple {
         private  String  appName  ;
         public    Apple(String  appName  ){
                this  . appName  = appName  ;
       }
       
         public  String ToString(){
                return   this  . appName  ;
       }
}

public   class  Bascket {
       List  bascket =  new  ArrayList(10);
       
       Lock  lock  =  new  ReentrantLock();
         //条件锁与Lock是相关的
       Condition  noEmptity  = lock  .newCondition();
       Condition  isFull  =  lock .newCondition();
       
         public   void  put(Apple  app throws  InterruptedException{
                //获取锁
                lock .lock();
                try  {
                  if  ( bascket  .size()>=10){
                         //等待
                         isFull .await();
                 }
                  bascket .add(  app );
                  //唤醒其它等待线程
                  noEmptity  .signalAll();
              }
                finally  {
                       lock .unlock();
              }
       }
       
         public  Apple take()  throws  InterruptedException{
                lock .lock();
              Apple  apple ;
                try  {
                       if  ( bascket  .size()<=0){
                             noEmptity  .await();
                     }
                       apple =  bascket .remove(0);
                       isFull .signalAll();
              }
                finally  {
                       lock .unlock();
              }
                return   apple  ;
       }

}

//生产者
public   class  Producer  implements  Runnable{
         private  Bascket  bascket  ;
         private  String  name  ;
         public  Producer(Bascket  bascket  ,String  name  ){
                this  . bascket  = bascket  ;
                this  . name  = name  ;
       }
         public   void  run(){
              
                while  ( true  ){
                       try  {
                           System.  out  .println(  name +  "produce.."  );
                             bascket .put(  new  Apple( "name"  +( int  )Math.random()*1000));
                     }  catch  (InterruptedException  e  ) {
                             //  TODO  Auto-generated catch block
                             e .printStackTrace();
                     }
                       try  {
                           Thread. sleep(1000);
                     }  catch  (InterruptedException  e  ) {
                             //  TODO  Auto-generated catch block
                             e .printStackTrace();
                     }
                     
              }
              
       }

}

public   class  TestDemo {
         public   static  void  main(String  args []){
              Bascket  bascket =  new  Bascket();
              Consumer  c1 =  new  Consumer( bascket  , "c1"  );
              
              Producer  p1 =  new  Producer( bascket  , "p1"  );
              Producer  p2 =  new  Producer( bascket  , "p2"  );
              
                //线程池管理
              ExecutorService  service  = Executors. newCachedThreadPool();
                service .execute(  c1 );
                service .execute(  p1 );
                service .execute(  p2 );
       }
}

具体Lock的实现机制将会在源代码中加以分析。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30024515/viewspace-1429096/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30024515/viewspace-1429096/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园短期闲置资源置换平台是一种创新的在线服务系统,旨在促进校园内学生、教职工以及其他成员之间的资源共享和有效利用。通过这个平台,用户可以发布、查找并交换他们暂时不使用的资源,从而实现资源的最大化利用,减少浪费,并促进校园内的可持续生活方式。以下是该平台可能包含的一些关键特性: 1. **用户注册和认证**:用户需要通过校园身份验证进行注册,确保平台的使用者都是校园社区的成员。 2. **资源发布**:用户可以发布他们愿意短期出借或交换的资源,如书籍、运动器材、电子产品、家具等。 3. **资源搜索和筛选**:用户可以根据资源类型、状态、可用时间等条件搜索和筛选所需的资源。 4. **在线预订系统**:用户可以通过平台预订所需的资源,并约定取用和归还的时间和地点。 5. **评价和信誉系统**:用户可以对交易的对方进行评价,建立信誉体系,增加用户间的信任。 6. **即时通讯功能**:平台内置即时通讯工具,方便用户就资源交换的细节进行沟通。 7. **安全和隐私保护**:确保用户的个人信息和交易记录的安全,保护用户的隐私。 8. **移动应用支持**:开发移动应用程序,使用户能够随时随地访问平台,进行资源的发布和搜索。 9. **教育资源置换**:特别为教师和研究人员提供教育资源的置换服务,如实验材料、研究工具等。 10. **活动和研讨会空间**:平台还可以用于发布和预订校园内临时活动或研讨会所需的空间。 11. **环保意识提升**:通过平台的推广和使用,增强校园社区成员的环保意识和资源节约意识。 12. **数据分析和报告**:平台可以收集和分析资源使用数据,为校园管理层提供资源利用和需求的洞察,以优化资源配置。 校园短期闲置资源置换平台通过提供一个便捷、高效和安全的在线环境,鼓励校园成员参与资源共享,不仅能够促进资源的合理分配和循环利用,还能增强社区的凝聚力和互助精神。随着共享经济理念的普及,这样的平台在校园中的推广和应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值