
并发
文章平均质量分 94
并发
默辨
希望成为一个有思想的软件工程师
展开
-
浅谈JUC体系的理解
当我们在谈一个技术的时候,不要过多的陷入技术本身,我们需要明白技术是服务业务的。今天的我们需要以一个更为广阔的视角去看待技术,多去看看、思考那些技术细节以外的东西。JUC同理。这部分涉及知识点相对较多,属于是八股文的重灾区。仔细想来,这已经是自己第三次学习JUC知识了,第一次学习如何使用,第二次学习相关八股知识点,那这一次自己要学什么?换句话说就是,这次学习自己能收获什么?常年行走在B端产品里,老实说,使用并发工具的频率并不高。原创 2024-03-10 17:40:11 · 905 阅读 · 1 评论 -
ScheduledExecutorService延时线程池的简单使用
文章目录一、Timer1、代码测试2、总结二、ScheduledExecutorService1、简单使用2、源码分析一、Timer在java.util包下有一个Timer类,用于实现定时任务1、代码测试代码实现步骤:1、创建一个timer对象2、调用timer对象的schedule多态方法,根据传入参数的不同,选择以何种方式执行任务第一个测试的是只执行一次的任务第二个测试的是周期性执行的任务public class TimerTest { private static L原创 2021-12-05 18:27:26 · 3392 阅读 · 0 评论 -
浅谈ThreadPoolExecutor线程池底层源码
文章目录一、线程池基础知识二、execute流程简单分析三、线程出现异常,后续流程源码四、拒绝策略的源码一、线程池基础知识线程池具体使用细节不再本篇文章的讨论范围,想了解用法的请自行百度,这里仅展示一个线程池小Demo该线程池的作用为:使用线程池执行100000个线程,线程任务实现的是callable接口,每个线程打印相应的逻辑,然后返回(此处线程池并没有对返回的结果进行接收)public class TestThreadPool { public static void main(Str原创 2021-12-05 15:20:39 · 438 阅读 · 0 评论 -
CompletableFuture异步任务的简单使用
文章目录一、FutureTask1、Runnable接口2、Callable接口3、Future接口4、代码测试案例5、总结二、CompletionService1、代码测试案例2、源码实现原理三、CompletableFuture1、API描述2、API补充细节说明3、异步任务代码测试(必看)写在前面:如果你是奔着标题来的,只想看CompletableFuture的使用,可以直接拉到第三节,查看具体的测试案例。如果你是想由浅入深的学习,建议按照顺序一点一点往下看一、FutureTask1、Ru原创 2021-12-04 16:17:30 · 1470 阅读 · 2 评论 -
七个常见队列的简单学习
文章目录常见阻塞队列一、ArrayBlockingQueue1、基本概念2、源码部分二、LinkedBlockingQueue1、基本概念2、源码分析3、LinkedBlockingQueue与ArrayBlockingQueue对比三、SynchronousQueue四、PriorityBlockingQueue五、DelayQueue六、LinkedTransferQueue七、LinkedBlockingDeque八、如何选择适合的阻塞队列常见阻塞队列BlockingQueue 接口的实现类都原创 2021-11-28 23:39:54 · 1441 阅读 · 2 评论 -
浅谈AQS锁实现机制(含ReentrantReadWriteLock读写锁加锁解锁相关源码分析)
文章目录一、分析AQS锁二、自定义一把AQS锁三、分析ReentrantReadWriteLock锁源码1、Sync2、ReadLock3、WriteLock一、分析AQS锁在Java语言层面,它拥有自己的锁实现机制(JVM层面的是synchronized)。这个锁机制就是AbstractQueuedSynchronizer类,也就是我们常说的AQS。我们常见的ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier等,都是基于AQS来实现的,只是不同原创 2021-11-27 00:25:39 · 919 阅读 · 0 评论 -
浅谈AQS同步队列(含ReentrantLock加锁和解锁源码分析)
文章目录一、相关理论二、执行原理1、同步等待队列和条件等待队列2、补充三、同步队列相关流程及源码1、lock.lock()2、tryAcquire3、addWaiter4、acquireQueued5、lock.unlock()四、条件队列一、相关理论这里涉及的理论与synchronized关键字相似 要是面试官再问我synchronized,我就这么答无论我们在程序中使用那种锁,其背后的理论基础都是基于操作系统的管程概念。管程不断发展,先后出现各种管程模型,无论是AQS还是synchroni原创 2021-11-21 20:20:58 · 1296 阅读 · 2 评论 -
要是面试官再问我synchronized,我就这么答
文章目录回答synchronized关键字步骤①管程概念开始②引出MESA模型③解释MESA模型④解释Java中MESA模型的实现⑤解释synchronized关键字背后的锁升级和锁降级⑥解释Object对象的内存分布(重点)⑦锁升级和锁降级的一些优化场景回答synchronized关键字步骤加锁的本质是,序列化访问临界资源①管程概念开始管程的概念:管程是指管理共享变量以及对共享变量操作的过程,让它们支持并发。这是整个Java锁机制设计的理论基础。可以补充一手操作系统相关概念,xxx②引原创 2021-11-15 00:59:33 · 821 阅读 · 2 评论 -
要是面试官再问我volatile,我就这么答
文章目录回答volatile关键字1、可见性2、禁止指令重排3、不保证原子性回答volatile关键字volatile关键字的三个特性:可见性、禁止指令重排、不保证原子性1、可见性此处的核心是理解MESI协议,基于volatile关键字展开,然后延申到MESI协议,并且完成MESI协议相关的一些计算机组成的概念的补充①现象:保证了可见性,在进行线程交互中过程中,被该关键字修饰的变量会具有可见性,能够保证变量在线程间的信息是同步的②字节码:被该关键字修饰的变量在被编译为字节码的时候,会添加了原创 2021-11-14 23:41:12 · 562 阅读 · 0 评论 -
浅谈volatile与计算机缓存一致性协议(MESI)之间的联系
文章目录一、缓存一致性的要求二、总线相关概念1、总线裁决概念2、总线锁定和缓存锁定3、总线窥探概念(Bus Snooping)三、一致性协议(Coherence protocol)1、MESI协议2、伪共享的问题3、解决方法写在前面:本文涉及内容计算机组成原理知识相关,并没有涉及太多Java相关知识。文末有通过volatile关键字测试案例反推计算机组成原理相关概念。在计算机体系结构中,缓存一致性就是共享资源数据的一致性,共享数据存储在多个本地缓存中。当系统在处理公共内存资源的缓存时,就会出现原创 2021-10-31 19:13:49 · 1552 阅读 · 0 评论 -
无锁、偏向锁、轻量级锁、重量级锁,完整的锁升级!
在打开这篇博客以前,我相信你对synchronized关键字是有一定的知识储备,本文主要带你强化记忆整个锁升级的过程,希望对你有帮助。当然我也相信,如果你真的理解了这些内容,你又会发现自己要学的东西还有很多!!!文章目录1、锁升级基本描述2、关于锁的疑问2、结合代码进行分析测试2.1、测试对象头的锁情况2.2、测试hashCode值3、概念补充1、锁升级基本描述synchronize...原创 2020-05-08 13:03:22 · 1747 阅读 · 3 评论 -
ThrealLocal原理讲解
ThrealLocal是面试中的一个重点,所以掌握好这部分知识点至关重要的。你可能会用到的链接:ThreadLocal源码分析Java的强、软、弱、虚四种引用类型文章目录1、ThreadLocal1.1、什么是ThreadlLocal1.2、多线程会出现的问题1.3、加锁1.4、使用ThreadLocal的方法1.5、ThreadLocal方案的好处2、ThreadLocal内部结构...原创 2020-05-07 23:54:08 · 1035 阅读 · 0 评论 -
Java的强、软、弱、虚四种引用类型
学习该部分的知识,我的初衷只是为了学习ThrealLocal,结果却被迫补课。后来了解到,这部分知识在面试中出现的频率还比较高,所以就单独写一篇博客,记录记录,也希望对你有帮助文章目录1、四种引用类型2、四种类型的测试2.1、强引用2.2、软引用2.3、弱引用2.4、虚引用3、总结1、四种引用类型强引用:最普通的引用 Object o = new Object()软引用:垃圾回收...原创 2020-05-07 18:11:39 · 396 阅读 · 0 评论 -
ThreadLocal源码分析
本文内容主要涉及的分析该类的重要方法的流程讲解,没有关于该类的知识点讲解。文章目录1、基本概述2、ThreadLocal的核心方法源码2.1、成员变量2.2、成员方法3、ThreadLocalMap源码分析3.1、成员变量3.2、Entry节点3.3、构造方法3.4、成员方法1、基本概述ThreadLocal,很多地方叫做线程本地变量,有些地方也叫做线程本都存储。ThreadLoca...原创 2020-05-06 23:42:59 · 380 阅读 · 0 评论 -
JUC(三)
文章目录16、JMM17、Volatile17.1、保证可见性17.2、不保证原子性17.3、指令重排18、单例模式19、CAS20、原子引用21、各种锁的理解21.1、公平锁、非公平锁21.2、可重入锁21.3、自旋锁21.4、死锁16、JMM什么是JMM?JMM:Java Memory Model Java内存模型,不是一个真实的存在的东西,它是一个概念,约定!关于JMM的一些...原创 2020-05-02 10:43:25 · 376 阅读 · 0 评论 -
JUC(二)
文章目录9、读写锁10、阻塞队列10.1、概述10.2、学会使用API10.3、同步队列11、线程池11.1、3大方法11.2、7大参数11.3、4种拒绝策略11.4、定义最大线程数12、四大函数式接口12.1、Function12.2、Predicate12.3、Consumer12.4、Supplier13、Stream流式计算14、ForkJoin15、异步回调9、读写锁ReadW...原创 2020-05-01 15:02:38 · 431 阅读 · 0 评论 -
JUC(一)
文章目录1、JUC简介2、线程和进程3、Lock锁(重点)3.1、传统的synchronized锁:队列锁3.2、Lock接口3.3、synchronized和Lock锁的区别4、生产者和消费者问题4.1、生产者和消费者:synchronized版4.2、JUC版的生产者和消费者4.3、Conditional实现精准的通知唤醒5、关于锁的八种现象6、不安全的集合类6.1、List6.2、Set6....原创 2020-04-29 17:54:35 · 3965 阅读 · 5 评论