12 2022 档案
摘要:一、概述 CyclicBarrier基于ReentrantLock和Condition等待唤醒的功能实现的,在构建CyclicBarrier时,会将count-1,操作count值是直接使用ReentrantLock来保证线程安全性,如果count不为0时,则添加condition队列中,如果等于0
阅读全文
摘要:JUC中的同步器三个主要的成员:CountDownLatch、CyclicBarrier和Semaphore。这三个是JUC中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能。 一、概述 CountDownLatch是基于AQS实现,当构建count对象时,传入的值其实就会赋值给AQS
阅读全文
摘要:一、概述 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 二、使用案例 可以用于做流量控制,特别是公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发地读取
阅读全文
摘要:一、概述 条件锁就是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。 比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其它线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才
阅读全文
摘要:一、简介 读写锁是一种特殊的锁,它把对共享资源的访问分为读访问和写访问,多个线程可以同时对共享资源进行读访问,但是同一时间只能有一个线程对共享资源进行写访问,使用读写锁可以极大地提高并发量。 二、特性 读写锁具有以下特性: 是否互斥读写 读 否 是 写 是 是 可以看到,读写锁除了读读不互斥,读写、
阅读全文
摘要:一、简介 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend和Thread.resume所可能引发的死锁”问题。因为p
阅读全文
摘要:一、概述 ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Synchronized,ReentrantLock增加了一些高级的扩展功能,比如它可以实现公平锁
阅读全文
摘要:一、简介 AbstractQueuedSynchronizer(简称AQS),抽象的队列式的同步器,是Java并发包实现的基类。 AQS用来构建锁和同步器的框架,使用AQS能简单且高效地构造出大量的应用广泛的同步器,如常用的ReentrantLock、Semaphore、CountDownLatch
阅读全文
摘要:使用场景 有次合并了别的分支代码,但是想合并单个文件,结果试一下全合并了,那么不想要这次合并,需要用远程强制覆盖本地分支的方法。 另外合并单个文件用cherry-pick方法。 参考:https://www.shuzhiduo.com/A/LPdoqQGNJ3/ https://blog.csdn.
阅读全文
摘要:git alias 别名操作 功能介绍 设置别名:熟悉linux的同学应该知道,在linux中,有些命令很长,并且加上了很多参数,每次敲一遍太麻烦了。于是就可以给这些命令设置别名或者是缩写,命令行输入别名能达到一样的效果。git的alias命令也是这么用的。 方法一:使用命令添加别名 git con
阅读全文