无名商城论坛

搜索
查看: 236|回复: 0

[其他技术] 【LSP】java的干儿子锁Lock

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:02:07 | 显示全部楼层 |阅读模式


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下方法如上。下面我们简单介绍下方法功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表