![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
java并发编程之美
西木东林
这个作者很懒,什么都没留下…
展开
-
wait notify--看这一篇就够了
wait notify方法wait notify 方法wait notify方法前言方法讲解wait()方法notify()方法.案例:设计一个线程安全的队列当做线程池用于存储线程场景分析代码如下:执行结果如下:案例结果分析:从jvm角度分析entry set 和wait set流程图分析synchronized wait 和notify原理其他:前言要理解wait和notify方法首先要理解synchronized是什么?以及怎么用,因为三个方法是一起才能使用的.参考链接:synchroniz原创 2020-12-24 07:07:49 · 644 阅读 · 1 评论 -
Condition案例使用及其源码解析
Condition案例使用及其源码解析文章目录Condition案例使用及其源码解析前言condition案例-结合ReentrantLock代码如下结果展示结果分析condition和ReentrantLock源码分析lock方法await方法addConditionWaiter方法fullyRelease方法release方法isOnSyncQueue方法await方法阻塞线程1完毕,线程2抢锁线程2通过signal方法主动释放线程1并cas抢占锁signal方法doSignal方法transfer原创 2020-12-22 16:13:06 · 224 阅读 · 0 评论 -
实际场景解读AQS读写锁ReentrantReadWriteLock
前面讲了什么是AQS.并且基于Reentrantlock已经看了一部分AQS方法.AQS是什么?基于ReentrantLock解密!但是其实真实项目中一般使用ReetrantLock,一般都是synchronized. 因为在jdk1.6之后,synchronized底层实现里面,里面做了一些计数器的维护,加锁释放锁,CAS啊.都能实现ReentrantLock一样的效果.而且使用起来相对简单. 另外读写锁ReentrantReadWriteLock其实也挺常用的下面就接着看对于Reentra..原创 2020-12-21 21:54:45 · 756 阅读 · 1 评论 -
AQS是什么?基于ReentrantLock解密!
解释AQS,AbstractQueuedSynchronizer,抽象队列同步器,ReentractLock、ReadWriteReentractLock,锁API底层都是基于AQS来实现的,一般我们自己不直接使用,但是是属于java并发包里的底层的API,专门支撑各种java并发类的底层的逻辑实现画图讲解AQS的原理步骤详解:• 首先线程1如果抢到了锁,会将AQS中的state变量加1• 同时记录当前抢到锁的线程.• 然后线程2在抢锁失败后会被阻塞住,同时加入AQS的阻塞队列中去.等待被唤醒原创 2020-12-20 08:02:03 · 559 阅读 · 1 评论 -
synchronized案例与原理分析
synchronized使用案例并发问题的代码如下:private static volatile int j=100; public static void main(String[] args) throws InterruptedException { updateJ updateJ = new updateJ(2, 100); updateJ updateJ1 = new updateJ(-3, 1000); updateJ.s原创 2020-12-16 18:00:41 · 126 阅读 · 0 评论 -
记一次线程递归中thread.sleep造成的惨案
最近为了写socket补偿方案.(一旦消息发送失败,就要进行失败消息存储,并且对失败消息按照消息类型的不同补偿方案进行补偿)补偿方式就是针对如下图不同的消息主键进行不同次数,不同等待时长进行消息补偿.然后因为没考虑到线程一定要有开有关.在同一个线程中进行递归补偿.并且递归逻辑中增加了Thread.sleep(15*1000)的逻辑.造成线程池资源耗尽.消息堆积.并且因为过程中有查库操作,将数据库也给搞挂了...下面是具体的代码:package medicalshare....原创 2020-08-04 11:32:00 · 1114 阅读 · 0 评论