《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就是非公平锁,公平的意思是先到先服务这就是所谓的公平,但这也是相对的程序运行时,不一定非是先来先服务,总体上是先来先服务。


你可能感兴趣的:(《java多线程编程核心技术》读书笔记4:Lock的使用)