
多线程
多线程
Java程序员廖志伟
《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)作者、清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主。研究过Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper、RabbitMQ、RocketMQ、Kafka、Redis、MySQL、ElasticSearch、MongoDB、ShardingSphere、DDD、Kubernetes等技术。
展开
-
多线程:第一章:我(线程)这一生
一个故事帮你理解线程和线程池我是一个线程,我一出生就被编了个号: 0×3704, 然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴。我身边的同伴0×6900 待的时间比较长, 他带着沧桑的口气对我说:我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能永远回不来了。我一脸懵懂,包裹,什么包裹?”不要着急,马上你就会明白了, 我们这里是不...原创 2019-06-29 20:32:19 · 5031 阅读 · 72 评论 -
线程池:第一章:线程池的底层原理
线程池的底层原理线程池相当于银行网点,常驻核心数相当于今日当值窗口,线程池能够同时执行的最大线程数相当于银行所有的窗口,任务队列相当于银行的候客区,当今日当值窗口满了,多出来的客户去候客区等待,当候客区满了,银行加开窗口,候客区先来的客户去加班窗口,当银行所有的窗口满了,其他客户在候客区等待,同时拒绝其他客户进入银行。当用户少了,加班的窗口等待时间(相当于多余线程存活的时间)(等待...原创 2019-10-01 15:02:05 · 3426 阅读 · 34 评论 -
线程池:第二章:线程池实际中使用哪一个
JDK提供的线程池三种常见的创建方式:那么具体用哪一个呢?答案是一个都不用。为什么呢?因为阿里巴巴实践过,证明过,具体请看阿里巴巴java开发手册:底层的是Linked这个接近于无界,非常大 ,所以不可用。...原创 2019-11-02 08:58:01 · 1825 阅读 · 40 评论 -
线程池:第三章:线程池的手写改造和拒绝策略以及线程池配置合理线程数
根据阿里巴巴开发手册:我们线程池使用ThreadPoolExecutor的方式进行创建,下面看底层源码:有七个参数:现在创建它:核心线程数2,同时执行的最大线程数5,多余线程存活时间1L,单位秒,阻塞队列3,默认线程工厂,拒绝策略创建线程池:第一种拒绝策略:AbortPolicy:超出最大线程数,直接抛出RejectedExecutionException...原创 2019-11-09 09:21:09 · 1243 阅读 · 21 评论 -
线程池:第四章:ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别?
ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。 ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。看看ThreadPoolTaskExecutor源码看看ThreadPoolExecutor源码public ThreadPoolExecutor...原创 2019-12-13 18:02:09 · 3400 阅读 · 32 评论 -
深入理解JUC:第六章:Semaphore信号灯
理论:Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量多个线程抢多个资源,下面案例是有六台车抢三个停车位使用Semaphore的代码:public class Demo { public static void main(String[] args) throws Exception{ //模拟三个停车位 ...原创 2019-08-11 11:08:35 · 2056 阅读 · 34 评论 -
深入理解JUC:第五章:CyclicBarrier循环栅栏
理论:它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier。未使用循环栅栏的代码:public class Demo { public static vo...原创 2019-08-11 10:20:28 · 2055 阅读 · 32 评论 -
深入理解JUC:第四章:CountDownLatch倒计时器
理论:CountDownLatch是一个非常实用的多线程控制工具类。常用的就下面几个方法:CountDownLatch(int count) //实例化一个倒计数器,count指定计数个数countDown() // 计数减一await() //等待,当计数减到0时,所有线程并行执行未使用CountDownLatch的代码:public class Demo { ...原创 2019-08-11 09:38:13 · 2511 阅读 · 55 评论 -
深入理解JUC:第三章:AtomicReference原子引用
第一章讲解了volatile不保证原子性,为解决原子性使用了AtomicInteger原子整型,解决了基本类型运算操作的原子性的问题,那我们自定义的实体类或者基本数据类型都要保证原子性呢?使用AtomicReference原子引用AtomicInteger原子整型:package com.javaliao.backstage;import java.util.concurrent.a...原创 2019-07-28 09:16:07 · 2751 阅读 · 39 评论 -
深入理解JUC:第二章:CAS:CompareAndSwap底层原理
CAS是什么?CAS是CompareAndSwap的缩写,作用是比较与交换。线程对变量的读取赋值等操作,要先将变量从主内存拷贝自己线程的工作内存空间,在工作内存中进行操作,操作完成后再将变量写回主内存package com.javaliao.backstage;import java.util.concurrent.atomic.AtomicInteger;public cla...原创 2019-07-28 09:16:02 · 2777 阅读 · 33 评论 -
深入理解JUC:第一章:volatile的三大特性
JUC是什么?是java.util.concurrent并发包什么是并发?什么是并行?并发:多个线程访问同一个资源。像秒杀一样。并行:就是你泡方便面,你一边烧热水,一边拆调料包。各种事情同时进行。volatile是什么?是java虚拟机提供的轻量级同步机制volatile的三大特性?保证可见性(遵守JMM的可见性) 不保证原子性 禁止指令重排JMM(java内...原创 2019-07-28 09:15:57 · 3330 阅读 · 35 评论 -
集合线程安全问题:第一章:集合类不安全之并发修改异常
直接上ArrayList线程不安全代码:package com.javaliao.backstage;import java.util.ArrayList;import java.util.UUID;public class Demo { public static void main(String[] args) { List arrayList = ne...原创 2019-07-28 09:42:19 · 857 阅读 · 38 评论