摘要: 一、概述 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 二、使用案例 可以用于做流量控制,特别是公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发地读取 阅读全文
posted @ 2022-12-27 17:59 迷走神经 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 一、概述 条件锁就是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。 比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其它线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才 阅读全文
posted @ 2022-12-27 14:32 迷走神经 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 一、简介 读写锁是一种特殊的锁,它把对共享资源的访问分为读访问和写访问,多个线程可以同时对共享资源进行读访问,但是同一时间只能有一个线程对共享资源进行写访问,使用读写锁可以极大地提高并发量。 二、特性 读写锁具有以下特性: 是否互斥读写 读 否 是 写 是 是 可以看到,读写锁除了读读不互斥,读写、 阅读全文
posted @ 2022-12-27 10:59 迷走神经 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 一、简介 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend和Thread.resume所可能引发的死锁”问题。因为p 阅读全文
posted @ 2022-12-27 10:03 迷走神经 阅读(77) 评论(0) 推荐(0) 编辑