|
Lock的由来
因为Synchronized简单所以不可控制,或者说不是很灵活。Synchronized是已块进行执行加锁的。这个时候我们需要通过Lock进行更加灵活的控制。
我们通过tryLock 、 unLock方法进行上锁释放锁。
线程之间的交互
在多线程开发中有的时候我们一个线程需要进行等待、休眠操作。这个时候其他线程没必要一直等待。Java中提供了对应的方法进行线程切换
- await/wait sleep yield
释放锁 释放 不释放 不释放
就绪节点 notify/notifyall方法后 休眠时间后 立刻就绪
提供者 Object/Condition Thread Thread
代码位置 代码块 任意 任意
通过上述表格我们可以看出来。在线程中我们可以通过Object.wait方法或者Condition.wait方法进行线程挂起的等待(将资源让给其他线程)。在其他线程通过Object.notify、Object.notifyall 、 Condition.signal方法进行唤醒当前挂载的线程(当前挂载的线程不止一个)。
Object.notify Object.notifyall Condition.signal
随机唤醒挂载线程之一 随机唤醒挂载线程之一 按顺序唤醒当前condition上的挂载线程
这里主要区别是Object和Condition两个类。Condition.signal会通知相同Condition上的线程就绪(按序通知)
Lock方法简介
通过查看源码我们发现Lock下方法如上。下面我们简单介绍下方法功能 |
|