JUC并发编程
文章平均质量分 86
无敌大剑人
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
8.ReentrocLock
这里非公平锁NonFairSync的源码跟之前公平锁的tryAcquire方法源码几乎一致。(1)公平锁:唯一不同的是公平锁在资源state == 0也就是没人加锁的时候,通过hasQueuedPrecessors()方法判断等待队列有没有在等待,如果有人在等待则它立马放弃去加锁。(2)非公平锁:非公平锁在state == 0 也就是没人加锁的时候,才不管你等待队列有没有人在等待,它不在乎,比较自私一点,直接就去争抢锁,成功就返回了。原创 2023-07-09 17:01:37 · 299 阅读 · 0 评论 -
7.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)
这一章节我们就来讲解CAS带来的另外一个问题,在并发激烈的时候,产生大量的自旋,空耗CPU的问题,以及怎么使用分段锁机制解决这个问题的,我们以LongAdder这个原子类来举例讲解。AtomicInteger的缺陷:并发竞争激烈时导致大量线程自旋LongAdder采用分段锁的思想**,去减少并发竞争的;我打个比方还是上面10000个线程并发操作,但是LongAdder内部可能有10个锁,不同的线程可能去竞争不同的锁,平均下来可能是1000个线程竞争1个锁这样;并发性能这样比起AtomicInteger可能就原创 2023-05-22 00:12:18 · 500 阅读 · 0 评论 -
4.volatile关键字
(只有当主存中i的值变化了之后或者第一次获取才会从主存中获取,否则是不会的,它有一个总线嗅探机制(MESI有讲),这里不详解)得到。就使用读取主内存的旧值 i = 0 ,然后执行use指令将 i = 0的值传递给线程B去进行操作了。就使用读取主内存的旧值 i = 0 ,然后执行use指令将 i = 0的值传递给线程B去进行操作了。但是这个时候**还没来的将最新的结果刷新回主内存的时候,前面去的,所以必须先执行完前面的执行之后,才能执行。的,这样它看到线程A的执行就是有序的。加上之后,线程A的指令。原创 2023-05-09 20:34:47 · 310 阅读 · 1 评论 -
3.内存屏障
强制读取主内存,强制刷新主内存的内存屏障。转载 2023-05-09 20:31:21 · 404 阅读 · 1 评论 -
2.MESI缓存一致性协议
MESI协议也叫做缓存一致性协议,主要是用来进行协调多核CPU的高级缓存的数据一致的。MESI一致性协议定义了高速缓存中数据的4种状态,分别是:M(Modified): 修改过的,只有一个CPU能独占这个修改状态,独占的意思是当有一个CPU的高速缓存数据处于这个状态的时候,其它CPU的高速缓存对这个共享的数据均不能操作;此时高速缓存中的数据发生了更新,需要被刷入主内存中。E(Exclusive): 独占状态,只有一个CPU能独占这个状态,同样当某个CPU的高速缓存的数据处于这个状态的时候,其它CPU的均不能转载 2023-05-09 20:25:49 · 452 阅读 · 0 评论 -
1.Java内存模型
JAVA内存模型定义了一个规范啊。那就是每个线程都有一个工作内存,线程操作共享变量的时候需要从主内存读取到工作内存,然后再传递给工作线程使用。共享变量修改后先刷新到工作内存,然后再刷新回主内存。转载 2023-05-09 20:19:42 · 125 阅读 · 1 评论 -
6.Atomic原子类
包下底层的实现原理基本都是差不多的**,都是**基于volatile和CAS操作来保证线程安全的。原创 2023-05-21 19:05:02 · 274 阅读 · 0 评论 -
5.jdk底层工具类Unsafe
Unsafe,JVM,并发编程转载 2023-05-21 16:32:27 · 261 阅读 · 0 评论 -
Park(暂停)&Unpark(恢复)线程
JUC并发编程 Park(暂停) & Unpark(恢复)原创 2023-05-03 21:30:37 · 191 阅读 · 0 评论 -
synchronized详解
synchronized详解原创 2023-04-24 01:15:22 · 2575 阅读 · 3 评论
分享