线程安全
文章平均质量分 57
雨developer
负债码农,喜欢大波浪
开源社区的活跃分子,个人站长,专注后端开发
展开
-
简单聊一下AQS
何为AQSAQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {}AQS 为构建锁和同步器提供了一些通用功能的是实现,因此,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 Reen原创 2021-10-16 10:54:16 · 330 阅读 · 1 评论 -
多线程模拟孩子抓糖经典问题
请听题共11颗糖,有两个小孩,一个小孩一次只能抓三颗糖,另一个小孩一次只能抓四颗糖如果剩余糖果不够当前小孩拿的数量,当前小孩不在抓糖,请用多线程模拟上面的描述废话不多说先上码public class TestFunction { static volatile Integer num = 11; //孩子线程 static class Child extends Thread { //每次拿取的糖数 private int r;原创 2021-06-25 09:02:48 · 277 阅读 · 5 评论 -
synchronized和ReentrantLock性能分析
这个文章的起因和一个同事的激烈学术性讨论,快打起来那种。我:ReentrantLock解决多路并发查询的数据合并方式更合适。棒哥:用synchronized在资源竞争激烈的性能更好。我:synchronized在资源竞争激烈的时候有极大的概率会进行锁升级,且锁的升级是不可逆的。棒哥:ReentrantLock内部的乐观锁自旋比线程挂起更消耗cpu的资源。存在即合理,我觉得单纯的认为某一种方式好或坏是一种片面的看法,这两种方式应该区分场景和并发量和处理时间来判定使用哪一种合适。特别是synchr原创 2021-06-23 11:00:03 · 1315 阅读 · 4 评论 -
Java如何模拟一百个线程同时执行(CountDownLatch,CyclicBarrier)
Java如何模拟一百个线程同时执行对并发测试,在平常开发过程中并不容易在现。但是借助CountDownLatch和CyclicBarrier可可以让线程同时等待同一个状态,在多核多线程的pc还是能大概的模拟出来,但是其实从真正意义上来说,并不是完全同时执行,cpu的资源是通过时间片轮转法进行调度。上代码CountDownLatch模拟多线程 @Test void testCountDownLatch(){ //等待100个线程同时执行 CountDo原创 2020-09-27 21:47:35 · 3623 阅读 · 2 评论 -
Java线程安全解决方案(synchronized,ReentrantLock,Atomic使用场景描述)
线程安全解决方案synchronized,ReentrantLock,Atomic 使用场景描述在实际开发过程中如果服务量,请求频繁,就会经常碰见并发,这时候不做处理就会出现很多非法数据。这时候就需要解决线程安全的问题,这时候就可以使用java当中的锁机制。常用有java关键synchronized、可重入锁ReentrantLock,还有并发包下的Atomic 或者Concurrent的安全类型。synchronized使用场景:在资源竞争不是很激烈的情况下,偶尔出现并发,需要同步的情形下,syn原创 2020-09-26 11:24:49 · 915 阅读 · 1 评论