substance
substance
全部文章
未归档
题解(7)
归档
标签
去牛客网
登录
/
注册
substance的博客
做最好的自己
全部文章
/ 未归档
(共176篇)
ReentrantLock源码图解
背景知识:AQS维护的status的几个状态即含义; cancelled:waitStatus值表示线程已经取消。 singal:waitStatus值,表示后继线程需要解除驻留。 condition:waitStatus值表示线程正在等待条件。 PROPAGATE:waitStatus值表示下一...
2022-04-20
0
273
AQS之ReentrantLock释放锁
点击进入release()函数 这个函数是一个AQS的方法,这些方法是父类实现的,不同得是加锁,解锁这些操作。这种方式体现了模板设计模式。 他会尝试去释放锁,释放成功会通知下一个等待者; 接着看tryRelease()干了什么工作:这个数字是加锁时候的一个反向操作的数字,由于线程重入概念的存在,并...
2022-04-20
0
295
aqs之ReentrantLock枷锁过程
ReentranLock部份源码:可以发现ReentrantLock本身并没有继承AQS,但是里面有个类叫做sync内部类继承了AQS; ReentrantLock总体上做了几件事情:1.构造,2加锁(加锁失败要入队,入队之后要阻塞,阻塞之后需要等待被唤醒。) 第二个内部类:(NonfairSyn...
2022-04-19
0
271
aqs抽象队列同步器
aqs中维护了一个CLH双向链表实现的队列,队列的存储的对象就是线程对象。 可以查看aqs源码可以发现,这时一个双向队列,这个队列中维护了一个 AQS中的队列的节点的源码: static final class Node { /** Marker to indicate a nod...
2022-04-18
0
348
(volaile + cas实现线程安全的对数据修改的类与synchronized关键字实现的方式的不同)
多个线程并发执行的时候,volatile并不能保证原子性的,所以在一个线程希望对资源加1时,另一个线程可能也想做同样的操作。那么如何避免这种操作带来的问题。 cas的核心思想:(比较期望值是否和原值相同,如果不同则宣告失败从而不去赋值) 1.通过补偿重试的自旋方式实现这种操作的,好处是不用加锁,并...
2022-04-17
0
266
并发编程的三大特性
并发编程的三大特性:1.原子性;2可见性(JMM问题);3.有序性(指令重排) 1.原子性的概念:一件事情不可再分,在java中就是不可以再次分割,可以看作是一个步骤,或者多个步骤,但是要求是顺序不可变,同时不能被分割。整个操作是为一个整体。要么全部执行完成,别人不能被执行。 2.实现的原子性方式就...
2022-04-17
0
384
使用箭头函数实现读写锁的使用
package com.ydlclass.lock; import java.util.Random; import java.util.concurrent.locks.ReentrantReadWriteLock; import static java.util.concurrent.loc...
2022-04-17
0
330
JUC之读写锁(ReadWriteLock)
背景:比如电商平台对于商品信息的上架次数远远的小于商品的读的操作。如果一个对象只能在同一时间被一个线程读很显然不符合实际的需求。 读写锁的存在:可以保证再读的时候多线程同时读并且不允许写,在写的时候只能一个线程写,并且不可读。提升效率。 package com.ydlclass.lock; imp...
2022-04-17
0
383
Lock接口以及ReentrantLock实现类(可重入锁)
//目前只学了内置锁,即synchronize。只加了关键字就上了锁,并且解锁的过程不需要我们去管就可以了。还提供了Api,Lock接口实现; //Lock接口由几个方法;lock()获取锁,trylock()表示尝试获取锁,这种只有在锁空闲时才能获得;tryLock(),unLock()释...
2022-04-17
0
357
LockSupport工具类
public class LockSupport { //线程工具类,可以让线程在任意位置阻塞; public static void main(String[] args) throws InterruptedException { Thread thread = ...
2022-04-17
0
293
首页
上一页
5
6
7
8
9
10
11
12
13
14
下一页
末页