多线程编程核心技术读书笔记(四):Lock的使用

来源:互联网 发布:2017中美人工智能创投 编辑:程序博客网 时间:2024/06/06 04:08

ReentrantLock类和ReentrantReadWriteLock类的使用;
ReentrantLock类可以实现与synchronized关键字相同的功能,并有更强的拓展性,具有嗅探锁定、多路分支通知等功能,使用也更加灵活;
Lock lock = new ReentrantLock();
lock.lock()方法获得对象锁,lock.unlock()方法释放对象锁。

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

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

notify()/notifyAll()方法进行通知时被通知的线程是由JVM随机选择的。但是使用ReentrantLock结合Condition类是可以实现选择性通知的。
synchronized就相当于整个Lock对象中只有一个单一的Condition对象,所有的线程都注册在它一个对象的身上。一个lock中可注册多个Condition对象,以实现选择性唤醒;

Object类中的wait()/wait(long timeout)方法———Condition类中await()/await(long time,TimeUnit unit);
Object类中的notify()/notifyAll()方法———Condition类中signal()/signalAll();

ReentrantLock线程安全,但是效率低,因为相当于synchronized;
ReentrantReadWriteLock类:实现读写锁,读操作相关:共享锁;写操作相关:排他锁;

阅读全文
0 0
原创粉丝点击