无名 发表于 2022-5-8 17:02:07

【LSP】java的干儿子锁Lock


http://cdn.u1.huluxia.com/g4/M01/6B/21/rBAAdl93CYmASNSmAACt4WdlvYs674.jpg
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方法简介http://cdn.u1.huluxia.com/g4/M01/6B/21/rBAAdl93CYqAUVaUAAAiopA_OhA346.jpg

通过查看源码我们发现Lock下方法如上。下面我们简单介绍下方法功能
页: [1]
查看完整版本: 【LSP】java的干儿子锁Lock