
多线程
文章平均质量分 84
叫练
毕业北京理工大学,精通数据库,多线程,虚拟机
展开
-
ThreadLocal 慌不慌?
目录JVM引用ThreadLocal解析总结现在稍微大点的公司面试,可能会问到ThreadLocal源码实现,不过在介绍它之前,我们先介绍JVM中引用的概念。所谓这些概念就是我所说的基础了。引用强弱关系到内存垃圾回收时机,用好引用可以减轻内存压力。JVM引用一共分为4种,分别是强引用,软引用,弱引用和虚引用。JVM引用强引用:如上图:根引用list指向堆,一直向list添加512K的字节数组,程序几秒后会出现堆溢出,代码中list引用称为强引用。强引用内存一直不会被释放,.原创 2021-03-22 11:02:31 · 2196 阅读 · 0 评论 -
Semaphore实战
目录简介实战实现原理总结简介Semaphore信号量计数器。和CountDownLatch,CyclicBarrier类似,是多线程协作的工具类,相对于join,wait,notify方法使用起来简单高效。下面我们主要看看它的用法吧!实战限流。限制线程的并发数。比如在一个系统中同时只能保证5个用户同时在线。import java.util.concurrent.Semaphore;/** * @author :jiaolian * @date :C..原创 2021-03-04 16:52:21 · 6969 阅读 · 2 评论 -
图解CyclicBarrier运动员接力赛
目录图解游戏规则案例说明比较CountDownLatch总结图解游戏规则大家都知道运动员短跑接力赛,今天我们并不是讲接力赛,我们讲“接力协作赛”,需要我们重新定义下游戏规则:如下图所示现在有运动员A,B,先定义游戏规则:赛道目前是300米,每个运动员在跑完第一个100米时,需要等待其他运动员跑完第一个100米,比如运动员A先跑完100米,而此时运动员B只跑了95米,那运动员A必须要等待运动员B跑完剩余的5米,然后再一起接着跑第2个100米,第三个100米,规则也和第1个.原创 2021-03-01 16:55:35 · 8094 阅读 · 3 评论 -
join为啥会阻塞主线程?
join使用上篇我们介绍了CountDownLatch,顺便说到了Thread中的join方法!import java.util.concurrent.TimeUnit;/** * @author :jiaolian * @date :Created in 2021-02-28 21:43 * @description:join测试 * @modified By: * 公众号:叫练 */public class JoinTest { public s.原创 2021-02-28 22:32:55 · 10034 阅读 · 5 评论 -
正月十五吃汤圆CountDownLatch
CountDownLatch实际应用今天是正月十五,给大家拜个晚年啦!元宵节是中国传统节日,吃汤圆不能少啊,今天我们统计下“叫练”吃汤圆时间,并用代码模拟下叫练吃汤圆!其中用到我们的CountDownLatch了!import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;/** * @author :jiaolian * @date :Created in 2021-02-26原创 2021-02-26 17:03:46 · 8577 阅读 · 1 评论 -
并发队列:PriorityBlockingQueue和DelayQueue案例使用
目录PriorityBlockingQueue使用DelayQueue使用总结PriorityBlockingQueue使用import java.util.concurrent.PriorityBlockingQueue;/** * @author :jiaolian * @date :Created in 2021-02-03 15:44 * @description:priorityBlockingQueue优先级队列测试 * @modified By: * 公众号原创 2021-02-05 10:57:43 · 319 阅读 · 0 评论 -
并发队列:ArrayBlockingQueue实际运用场景和原理
目录ArrayBlockingQueue实际应用场景ArrayBlockingQueue简化类图结构并发队列阻塞和非阻塞概念非阻塞阻塞ArrayBlockingQueue实现原理浅析完全非阻塞队列ConcurrentLinkedQueueList 多线程安全方案:LinkedBlockingQueue总结ArrayBlockingQueue实际应用场景之前在某公司做过一款情绪识别的系统,这套系统通过调用摄像头接口采集人脸信息,将采集的人脸信息做人脸识别和情绪.原创 2021-02-03 10:13:59 · 10026 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁简单原理案例证明
目录ReentrantReadWriteLock存在原因?独占获取锁简单流程共享获取锁简单流程写锁降级总结ReentrantReadWriteLock存在原因?我们知道List的实现类ArrayList,LinkedList都是非线程安全的,Vector类通过用synchronized修饰方法保证了List的多线程非安全问题,但是有个缺点:读写同步,效率低下。于是就出现了CopyOnWriteArrayList,它通过写时复制数组实现了读写分离,提高了多线程对List读的效.原创 2021-01-31 20:08:08 · 7867 阅读 · 0 评论 -
核酸检测:让我明白AQS原理
春节越来越近了,疫情也越来越严重,但挡不住叫练携一家老小回老家(湖北)团聚的冲动。响应国家要求去我们做核酸检测了。独占锁早上叫练带着一家三口来到了南京市第一医院做核酸检测,护士小姐姐站在医院门口拦着告诉我们人比较多,无论大人小孩,需要排队一个个等待医生采集唾液检测,OK,下面我们用代码+图看看我们一家三口是怎么排队的!import java.util.concurrent.locks.ReentrantReadWriteLock;/** * @author :jiaolian.原创 2021-01-23 20:59:09 · 13105 阅读 · 2 评论 -
CopyOnWriteArrayList 读写分离,弱一致性
目录为什么会有CopyOnWriteArrayList?什么是弱一致性fail-safe特性总结为什么会有CopyOnWriteArrayList?我们知道ArrayList和LinkedList实现的List都是非线程安全的,于是就有了Vector,它是基于ArrayList的线程安全集合,但Vector无论是add方法还是get方法都加上了synchronized修饰,当多线程读写List必须排队执行,很显然这样效率比较是低下的,那有没有一种办法让效率提升,让当读Li..原创 2021-01-18 17:45:37 · 4153 阅读 · 4 评论 -
Java单例7种测试实践
目录1.饿汉模式。 主动型太粗暴。2.懒汉模式 线程不安全3.懒汉加锁模式 线程还是不安全4.双重检测加锁 指令重排序5.双重检测加锁 volatile必要性6.静态内部类 被动型创建实例(推荐使用)7.静态代码块8.枚举总结单例:一个进程中只能存在唯一一个对象。1.饿汉模式。 主动型太粗暴。/** * @author :jiaolian * @date :Created in 2021-01-10 21:25 * @description:饿汉.原创 2021-01-12 09:49:52 · 1161 阅读 · 0 评论 -
母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列
目录简介一对一生产和消费:一只母鸡和叫练wait/notifyLock条件队列多对多生产和消费:2只母鸡和叫练/叫练媳妇wait/notifyAllLock条件队列Lock和synchronized比较总结简介多线程通信一直是高频面试考点,有些面试官可能要求现场手写生产者/消费者代码来考察多线程的功底,今天我们以实际生活中母鸡下蛋案例用代码剖析下实现过程。母鸡在鸡窝下蛋了,叫练从鸡窝里把鸡蛋拿出来这个过程,母鸡在鸡窝下蛋,是生产者,叫练捡出鸡蛋,叫练是消费者.原创 2020-12-31 09:47:50 · 873 阅读 · 0 评论 -
volatile,synchronized可见性,有序性,原子性代码证明(基础硬核)
目录0.简介1.可见性1.1 不可见性1.2 volatile可见性1.3 synchronized可见性2.原子性2.1 原子性2.2 volatile 非原子性2.3 synchronized 原子性3.有序性3.1 有序性3.2 volatile有序性3.3 synchronized有序性4.程序员学习方法心得5.总结0.简介前一篇文章《Synchronized用法原理和锁优化升级过程》从面试角度详细分析了synchronized关键原创 2020-12-22 17:03:39 · 7093 阅读 · 0 评论 -
Synchronized用法原理和锁优化升级过程(面试)
目录简介synchronized使用层面synchronized JVM层面synchronized的优化层面总结简介多线程一直是面试中的重点和难点,无论你现在处于啥级别段位,对synchronized关键字的学习避免不了,这是我的心得体会。下面咱们以面试的思维来对synchronized做一个系统的描述,如果有面试官问你,说说你对synchronized的理解?你可以从synchronized使用层面,synchronized的JVM层面,synchronized的优化层.原创 2020-12-21 10:37:09 · 7403 阅读 · 1 评论 -
Java中多线程安全问题实例分析
案例package com.duyang.thread.basic.basethread;/** * @author :jiaolian * @date :Created in 2020-12-16 14:02 * @description:线程不安全分析 * @modified By: * 公众号:叫练 */public class ThreadUnsafe { public static void main(String[] args) { Thread原创 2020-12-16 17:23:34 · 724 阅读 · 0 评论 -
Java中CAS原理分析(volatile和synchronized浅析)
CAS是什么?CAS英文解释是比较和交换,是cpu底层的源语,是解决共享变量原子性实现方案,它定义了三个变量,内存地址值对应V,期待值E和要修改的值U,如下图所示,这些变量都是在高速缓存中的,如果两个线程A,B分别通过cas方式同时修改共享变量,假设当A线程先获取时间片,如果发现V的值和E相等就将主内存值更新为U,如果不相等说明线程B在线程A更新之前已经成功更新过,线程A会失败重试,此时根据缓存一致性协议,线程A的本地副本会失效,需要从主内存再同步最新的变量到本地内存副本,在Java中通过调用UnSaf原创 2020-12-14 15:56:48 · 6249 阅读 · 0 评论 -
可见性是什么?(通俗易懂)
谈谈硬件架构模型先谈谈硬件是如何工作的,举个例子,你在window操作系统上需要下载一个游戏(20M),就需要使用cpu和内存了,在这个过程中cpu负责计算,比如计算下载进度,统计下载完成一共需要多少时间等,内存为cpu提供数据的,负责保存游戏的所有信息,比如游戏的大小(20M)数据。在这个过程中,cpu从内存上取游戏大小这个数据,然后cpu去计算下载进度,把计算出的进度结果再写到内存,最终呈现到用户页面,大概对cpu和内存应该有个大概的认识了吧!看上去下载游戏这个过程分工明确,没有问题,但实际上cpu原创 2020-12-10 10:02:42 · 6972 阅读 · 5 评论