J.U.C
文章平均质量分 81
bluedraam_pp
不是有希望才坚持,是坚持才有希望
展开
-
各种同步器的实现原理
我们可以把是实现的原理分成两部分,一个是修改 state 的部分,也就是 AQS 的实现类是如何实现 tryAcquire() 方法;另外一个入队列和出队列的逻辑。其中前一个是都不相同的,后面一个是基本相同的。先来看看,ReentrantLocktryAquire()// 有两个,一个是公平锁,一个非公平锁static final class FairSync extends Sync { private static final long serialVersionUID = -30008原创 2022-02-13 21:54:44 · 1095 阅读 · 0 评论 -
AQS对基本概念的实现
非公平锁公平锁如何实现的呢?我们来看看 ReentranLock 中的 NonfairSync 类,这个类中就实现了对非公平锁的实现。final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1);}这段逻辑中,我们可以发现,线程是直接取修改 state 的状态,这代表竞争锁,如果竞争到原创 2022-02-13 21:53:25 · 271 阅读 · 0 评论 -
AQS 的基础方法
AQS 到底是什么东西AQS 解决的是申请锁和进程间通信的问题。在 AQS 出现之前,锁只能用 sychronized , 进程间通信只能使用 Object#wait/waitAll 和 Object#notify/notifyAll 来进行线程之间通信问题。wait/notify 的缺点是等待的线程需要进入阻塞状态,再 I\O 任务的场景下,这种需要阻塞线程的方式效率是不高的。自旋的方式可以提供这种效率。如果有一个基础的类。在它的基础上我们可以实现公平锁、非公平锁、可重入锁、不可重入锁、独享锁、共享锁原创 2022-02-13 21:51:30 · 494 阅读 · 0 评论 -
关于 J.U.C 的基本概念
一些基本的概念乐观锁和悲观锁乐观锁是在使用资源之前不上锁的处理方式。悲观锁是在使用资源之前要上锁。乐观锁和悲观锁的定义是使用场景来说。 在资源竞争不激烈的情况下,说明资源比较充足,我们保持一种乐观的态度,所以在使用之前不用上锁。悲观锁是在资源竞争激烈的情况下,说明资源竞争比较激烈,所以在使用资源之前要上锁。上锁之后的目的就是告诉前来竞争的线程,你们不用抢占资源了,这个资源在用了,而且用的时间不会短,你就去排队吧。公平锁和非公平锁公平锁就是获得锁的机会大家都是一样的,大家都在一种 FIFO 的队列里面原创 2022-02-13 21:46:30 · 728 阅读 · 0 评论