《java多线程编程核心技术》读书笔记4:Lock的使用

第四章:Lock的使用


在Java中,除了通过synchronized关键字进行同步处理意外,Java还提供了另外的方法进行同步,这就是Lock这个类;


      Lock lock = new ReentrantLock();

      lock.lock()方法获得对象锁,lock.unlock()方法释放对象锁。相对于synchronized关键字这个lockz比较直接,易于理解。

      lock.lock()方法所取得的锁是对象锁,当一个线程取得锁以后,其余线程则无法访问同样的锁所标记的代码。


       synchronized关键字和wait()和notify(),notifyAll()方法的结合可以实现等待/通知模式,ReentrantLock也可以实现同样的功能,但需要借助Condition对象。

       notify()/notifyAll()方法进行通知时被通知的线程是由JVM随机选择的。但是使用ReentrantLock结合Condition类是可以实现选择性通知的。

       synchronized就相当于整个Lock对象中只有一个单一的Condition对象,所有的线程都注册在它一个对象的身上。


       如果想要实现选择性唤起某些线程,就需要生多个Condition对象,当在多个线程的调用的时候,调用那个Condition的signal()方法,于此Condition相关的线程就会被唤醒。


   公平锁,非公平锁:在生成lock= new ReentrantLock(isFair)的时候,isFair是true就是公平锁,是false就是非公平锁,公平的意思是先到先服务这就是所谓的公平,但这也是相对的程序运行时,不一定非是先来先服务,总体上是先来先服务。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值