
JUC多线程
文章平均质量分 88
JUC多线程
ABin-阿斌
写一生代码,创一世佳话,筑一览芳华。
展开
-
多线程处理你真的学会了,带你看看 CompletableFuture
咱们都知道可以通过继承Thread类或者实现 Runnable 接口两种方式实现多线程。但是有时候我们希望得到多线程异步任务执行后的结果,也就是异步任务执行后有返回值,Thread 和 Runnable 是不能实现的。当我们需要返回值的时候怎么办呢?Java 1.5 推出的 Callable 和 Future 接口就解决了这个问题。但是因为 Future 有几个局限,由于这几个局限,在Java1.8就推出了加强版的Future类:CompletableFuture。原创 2024-03-12 23:20:05 · 1209 阅读 · 0 评论 -
多线程:实现三个线程轮流打印1-100的数字
【代码】多线程:实现三个线程轮流打印1-100的数字。原创 2023-03-20 00:43:55 · 993 阅读 · 0 评论 -
多线程:自定义线程池 ThreadPoolExecutor 的核心线程回收设置参数 allowCoreThreadTimeOut 原理
有界、无界队列对ThreadPoolExcutor执行的影响allowCoreThreadTimeOut :方法作用:设置是否回收在保活时间后依然没没有任务执行核心线程。这个参数默认值为:false设置成true还是false需要根据你具体的业务判断,如果该业务需要执行的次数并不多,采用多线程只是为了缩短执行的时间,那么可以设置成true,毕竟用完后很长时间才会用到,线程干耗着也是耗费资源的。但是如果是需要较高并发执行的业务,那么可以设置为false,保留着线程,避免每次都得创建线程耗费资源。原创 2023-03-19 16:31:02 · 1536 阅读 · 0 评论 -
多线程:线程池拒绝策略的四大类型分析
拒绝策略提供顶级接口 RejectedExecutionHandler ,其中方法 rejectedExecution 即定制具体的拒绝策略的执行逻辑四种拒绝策略是相互独立无关的,选择何种策略去执行,还得结合具体的业务场景。实际工作中,一般直接使用 ExecutorService 的时候,都是使用的默认的 defaultHandler ,也即 AbortPolicy 策略。个人建议在生产中一般使用:CallerRunsPolicy 这个策略,因为至少他不会丢弃线程,其他三个都是有线程丢失的。原创 2023-03-19 11:13:16 · 1664 阅读 · 2 评论 -
阿里巴巴面试题:多线程相关
从题中我们可以 看出如果从多个线程角度考虑,那么第一个方法出现的问题就是:必然有一个线程去读这个 result 值大概率读的是个中间值,并不是最终的结果值,因为for循环还没有结束第二个方法的问题:当线程一在不断读取这:result 的时候那么读是:初始值或最终结果值,永远不会读到中间值。如果从线程安全考虑,第二种写法比第一种安全的多结论第二种写法比第一种写法出现不一致性的概率要小,因为我们在方法完成之前,读不到中间状态的脏数据尽量少暴露线程计算过程的中间状态能用范围小的变量,不用范围大的变量原创 2022-06-22 16:15:27 · 998 阅读 · 0 评论 -
高性能队列——Disruptor
Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。在美团技术团队原创 2022-06-17 17:54:01 · 1247 阅读 · 0 评论 -
JUC高级多线程_12:CAS与ABA问题
我是 ABin-阿斌:写一生代码,创一世佳话。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录一、CAS简介1. CAS有哪些操作:2. 注意事项:3. 代码演示:4. CAS的缺点二、ABA问题1. 什么是ABA2. 代码演示3. 如何避免ABA问题一、CAS简介全称 Compare and swap,字面意思:【比较并交换】1. CAS有哪些操作:需求场景: 我们假设内存中的原数据 V,旧的预期值 A,需要修改的新值 B。三步操作:比较 A 与 V 是否.原创 2021-07-05 11:42:54 · 439 阅读 · 0 评论 -
JUC高级多线程_11:JMM与Volatile的具体介绍与使用
我是 ABin-阿斌:写一生代码,创一世佳话。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。一、重构方面的快捷键与使用技巧在二、代码提示插件与使用技巧原创 2021-07-01 15:36:07 · 833 阅读 · 0 评论 -
JUC高级多线程_10:Future异步回调的具体介绍与使用
我是 ABin-阿斌:写一生代码,创一世佳话。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录1.Future简介2.Future的使用场景3.Future的具体使用3.1 对应的方法介绍1.Future简介Future 是 java1.5 引入的一个 interface,可以方便的用于异步结果的获取。Future 代表的是异步执行的结果,意思是当异步执行结束之后,返回的结果将会保存在 Future 中。2.Future的使用场景当我们执行一个长时间运行的任务时.原创 2021-06-30 10:26:51 · 435 阅读 · 0 评论 -
JUC高级多线程_09:ForkJoin框架的具体介绍与使用
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录ForkJoin简介作用1.ForkJoinPool2.什么是——工作窃取3.ForkJoinTask4.代码案例演示:ForkJoin简介ForkJoin 是 Java7 提供的原生多线程并行处理框架,其基本思想是将大任务分割成小任务,最后将小任务聚合起来得到结果。fork 是分解的意思, join 是收集的意思.,它非常类似 于 HADOOP 提供的 MapRe.原创 2021-06-28 22:47:36 · 372 阅读 · 3 评论 -
JUC高级多线程_08:线程池的具体介绍与使用
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录1 . 简介1. 线程池的特点:2. 线程池的优点:2 . 使用1. 架构2. 线程池的三大方法:3 . 底层源码4 . threadPoolExecutor 7 个重要参数1. int corePoolSize:2. int maximumPoolSize:3. long keepAliveTime:4. TimeUnit unit:5. BlockingQueue wo.转载 2021-06-25 16:10:33 · 589 阅读 · 0 评论 -
JUC高级多线程_07:读写锁与阻塞队列的具体介绍与使用
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。原创 2021-05-31 17:42:37 · 382 阅读 · 0 评论 -
JUC高级多线程_06:多线程下得常用辅助类
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录1 . CountDownLatch(减少计数)1. 例子 - 未使用 CountDownLatch2. 使用 CountDownLatch 后3. 原理:2 . CyclicBarrier(循环屏障)1. 例子2. 原理:3 . Semaphore(信号灯)1. 例子2. 原理:3. 启发1 . CountDownLatch(减少计数)做减法,计数器减为 0 才可以.转载 2021-05-28 14:41:40 · 284 阅读 · 0 评论 -
JUC高级多线程_05:获取线程的第三种方式
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录获取线程的第三种方式 : Callable接口1 . 前言1. 有几种获取多线程的方式:2. 以下两种获得线程的方式的异同:2 . 使用1. 重写 call 方法2.创建线程3.获取返回值3 . 原理1. 简述2. 解释3. 结论获取线程的第三种方式 : Callable接口1 . 前言1. 有几种获取多线程的方式:答:传统的是继承 Thread 类和实现 R.转载 2021-05-28 10:03:06 · 167 阅读 · 0 评论 -
JUC高级多线程_04:高并发下集合类的具体使用
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录一、List接口举例说明:使用 AarrayList 在高并发下出现的问题如下:造成问题的原因:如何解决这个问题:方式一:List list = new Vector<>();方式二:使用Collections.synchronizedList方式三:采用JUC提供的并发容器,CopyOnWriteArrayList底层源码分析:二、Set接口举例说明:具体Se.原创 2021-05-24 17:02:29 · 780 阅读 · 0 评论 -
JUC高级多线程_03:关于多线程锁的八个常见问题
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录1 . 多线程情况下关于锁会出现的八项问题:代码演示:1. 问题一:正常访问,先打印短信还是邮件2. 问题二:停4秒在短信方法内,先打印短信还是邮件3. 问题三:普通的hello方法,是先打短信还是hello4. 问题四:现在有两部手机,先打印短信还是邮件5. 问题五:两个静态同步方法,1部手机,先打印短信还是邮件6. 问题六:两个静态同步方法,2部手机,先打印短信还是邮件.原创 2021-05-21 18:02:57 · 379 阅读 · 0 评论 -
JUC高级多线程_02:线程间的通信
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录声明:本文章为转载文章1 . 前言-题目2 . 线程通信3 . 多线程模板(2)1. 根据生产者 + 消费者的工作顺序得出2. 口诀(2):判断 - 干活 - 通知3. 模板3 . 多线程模板(3)1. 上述代码的问题2. 原因3. 解决办法4. 口诀(3):多线程交换中,必须防止多线程的虚假唤醒,也即线程中判断只能用 while5. 修改后的代码4 . 线程通信中 syn.转载 2021-05-21 15:06:42 · 487 阅读 · 0 评论 -
JUC高级多线程_01:基础知识回顾
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。文章目录声明:1 . JUC 是什么2 . 进程/线程是什么1. 进程2. 线程3 . 并发/并行是什么1. 并发2. 并行4 . wait / sleep 区别5 . 线程六大状态6 . 复习售票问题1. 题目 :三个售票员 卖出 30张票2. 口诀:线程 操作 资源类3. 模板1.03. 模板2.0最终7 . 上述模板中的知识点补充1. 关于 thread.start() 的问.转载 2021-05-21 13:57:37 · 547 阅读 · 0 评论