![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程与高并发
文章平均质量分 96
逐渐深入java多线程与高并发
SlowIsFastyxy
这个作者很懒,什么都没留下…
展开
-
07、J.U.C并发工具集场景及原理分析
是一个不存储元素的阻塞队列,它的主要特点是每个插入操作必须等待另一个线程的相应移除操作,反之亦然。的特性,当队列为空时,消费者线程将阻塞,直到生产者线程向队列中添加元素;同样,当队列已满时,生产者线程将阻塞,直到消费者线程从队列中取出元素。实例,并创建了两个线程:一个生产者线程和一个消费者线程。生产者线程向队列中添加元素,而消费者线程从队列中取出元素。本质上: 抢占一个令牌. -> 如果抢占到令牌,就通行, 否则,就阻塞!**原理分析:**通过信息的传递来实现生产者和消费者的阻塞和唤醒。原创 2023-09-11 23:59:03 · 119 阅读 · 2 评论 -
06、condition源码分析及基于condition实现阻塞队
在一些项目中,可能同公司的其他部门的应用服务会要求同步我们人事系统的部分组织架构数据,但是当人事系统数据发生变更后,应用的依赖方需要进行数据的同步, 这种场景下,由于员工离职/变更操作不是非常频繁,所以能有效防止线程阻塞,也基本没有并发和吞吐量的要求,所以可以将数据存放到ArrayBlockingQueue中, 由依赖方应用服务进行获取同步。比如会话转交,通常坐席需要进行会话转交,如果有坐席在线那么会为我们分配一个客服,但是如果没有,那么阻塞请求线程,一段时间后会超时或者提示当前坐席已满。原创 2023-08-24 17:18:13 · 73 阅读 · 0 评论 -
04、并发安全性之Lock锁及原理分析
那什么是JMM呢?首先,我们都知道Java程序是运行在Java虚拟机上的,同时我们也知道,JVM是一个跨语言跨平台的实现,也就是Write Once、Run Anywhere。那么JVM如何实现在不同平台上都能达到线程安全的目的呢?原创 2023-08-23 20:52:44 · 123 阅读 · 0 评论 -
05、线程阻塞唤醒wait,notify以及condition, 死锁等原理分析
方法让当前线程阻塞,等待其他线程发出通知或中断信号。这个方法的主要作用是尝试获取指定数量的锁,如果成功则返回true,否则返回false。关键字获取队列的锁,确保同一时间只有一个线程可以访问该代码块。join也是基于wait/notify来实现,notify是在线程销毁之后调用的,代码如下。接着,线程会暂停1秒钟,模拟生产过程。如果队列已满,当前线程会被阻塞,同时释放生产者所持有的锁,直到其他线程调用。方法中,使用了一个无限循环来模拟持续生产数据的过程。方法,表示当前已经生产了数据,提示消费者可以消费了。原创 2023-08-23 20:48:41 · 128 阅读 · 0 评论 -
03、并发编程带来的挑战之可见性
引入总线锁和缓存锁机制之后,CPU对于内存的操作大概可以抽象成下面这样的结构,从而达到缓存一致性效果如下图所示,基于上述分析,我们基本上了解到,导致可见性问题的本质,是因为CPU层面的不断优化,从最早的CPU高速缓存、到Store Buffer,本意上是提高CPU的利用率,但是实际上却因为这样一个优化带来了缓存一致性问题。为了解决CPU的缓存一致性问题,CPU提供了总线锁、缓存锁的机制,只需要在总线上声明Lock#信号,CPU便会增加锁的机制来解决缓存一致性问题。原创 2023-08-23 14:35:36 · 55 阅读 · 0 评论 -
02、并发编程带来的安全性挑战之同步锁
因为JVM虚拟机自己有一些默认启动的线程,这些线程里面有很多的Synchronized代码,这些Synchronized代码启动的时候就会触发竞争,如果使用偏向锁,就会造成偏向锁不断的进行锁的升级和。这么设计的目的,其实是为了减少重量级锁带来的性能开销,尽可能的在无锁状态下解决线程并发问题,其中偏向锁和轻量级锁的底层实现是基于自旋锁,它相对于重量级锁来说,算是一种无锁的实现。这就要引出Markword对象头这个概念了,它是对象头的意思,简单理解,就是一个对象,在JVM内存中的布局或者存储的形式。原创 2023-08-20 01:58:58 · 42 阅读 · 1 评论 -
01、了解线程
多线程原创 2023-08-18 22:25:26 · 29 阅读 · 1 评论