并发编程
文章平均质量分 97
并发编程
Kaiz‘s Blog
这个作者很懒,什么都没留下…
展开
-
一文搞懂线程池原理——Executor框架详解
文章目录1 使用线程池的好处2 Executor 框架2.1 Executor 框架结构2.2 Executor 框架使用示意图2.3 Executor 框架成员2.3.1 Executor 与 ExecutorService2.3.2 Future接口2.3.3 Runnable接口和Callable接口2.3.4 Executors创建线程池3 ThreadPoolExecutor 详解3.1 线程池状态转换3.2 线程池处理流程3.2.1 execute()方法3.2.2 Worker线程管理3.2.原创 2021-06-19 17:16:34 · 2555 阅读 · 3 评论 -
并发容器总结
文章目录1 JDK 提供的并发容器简介2 Map2.1 ConcurrentHashMap2.2 ConcurrentSkipListMap3 List3.1 CopyOnWriteArrayList简介3.2 CopyOnWriteArrayList实现原理3.3 读取和写入源码简析4 Set5 Queue5.1 阻塞与非阻塞5.2 ConcurrentLinkedQueue5.3 阻塞队列5.3.1 ArrayBlockingQueue5.3.2 LinkedBlockingQueue5.3.3 Pri原创 2021-06-19 00:58:30 · 560 阅读 · 0 评论 -
【Java并发容器】ConcurrentHashMap
文章目录1 问题引出2 ConcurrentHashMap结构2.1 JDK1.72.2 JDK1.83 源码分析3.1 ConcurrentHashMap(JDK1.7)3.1.1 初始化3.1.2 put3.1.3 扩容 rehash3.1.4 get3.2 ConcurrentHashMap(JDK1.8)3.2.1 初始化 initTable3.2.2 put3.2.3 get4 总结参考转载:https://www.javadoop.com/post/hashmap1 问题引出HashM转载 2020-12-03 13:16:41 · 174 阅读 · 0 评论 -
【并发编程】Atomic原子类
文章目录1 Atomic原子类简介1.1 基本类型1.2 数组类型1.3 对象的属性修改类型1.4 引用类型1.5 原子累加器2 原子操作实现原理2.1 简析CAS2.2 CAS实现原子操作的三大问题2.2.1 ABA问题2.2.2 循环时间长开销大2.2.3 只能保证一个共享变量的原子操作2.3 CAS应用参考1 Atomic原子类简介原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。即使是在多个线程一起执原创 2020-11-06 12:23:38 · 472 阅读 · 0 评论 -
【并发编程】浅析AQS及并发工具类(Semaphore、CountDownLatch 、CyclicBarrier)
文章目录1 AQS 概述2 AQS 原理2.1 同步队列2.2 同步状态2.2.1 独占式(EXCLUSIVE)2.2.2 共享式(SHARED)2.2.3 超时获取方式2.3 模板方法3 Semaphore(信号量)4 CountDownLatch (倒计时器)4.1 概述4.2 应用场景5 CyclicBarrier(循环栅栏)5.1 概述5.2 源码分析5.3 应用场景5.4 CyclicBarrier和CountDownLatch的区别参考1 AQS 概述AQS 的全称为(AbstractQue原创 2020-11-05 19:13:31 · 819 阅读 · 3 评论 -
【并发编程】浅析重入锁ReentrantLock与读写锁ReadWriteLock
文章目录1 Lock接口1.1 Lock与synchronized1.2 Lock接口方法2 ReentrantLock2.1 可重入2.2 公平/非公平2.3 小结2.4 中断与超时等待3 ReadWriteLock3.1 读锁3.1.1 读锁加锁3.1.2 读锁释放3.2 写锁3.2.1 写锁加锁3.2.2 写锁释放3.3 小结参考1 Lock接口1.1 Lock与synchronized在Lock接口出现之前,Java程序是靠synchronized关键字用来实现锁功能,使用时隐式地获取和释放锁原创 2020-11-04 20:19:28 · 697 阅读 · 2 评论 -
【并发编程】死锁
文章目录1 死锁定义2 避免死锁3 哲学家就餐问题3.1 破坏循环等待条件3.2 破坏请求与保持条件参考资料1 死锁定义死锁是指,两个或两个以上的线程在执行过程中,由于竞争资源而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。简化一点说就是:一组相互竞争资源的线程因为互相等待,导致“永久”阻塞的现象。例如下面案例:public class DeadLockTest { private static String A = "A"; private static String原创 2020-11-04 01:33:06 · 375 阅读 · 1 评论 -
【并发编程】volatile
文章目录1 Java 内存模型1.1 可见性1.2 初识volatile1.3 有序性1.3.1 重排序1.3.2 案例分析2 volatile原理2.1 happens-before2.2 内存屏障2.3 double-checked locking参考资料1 Java 内存模型JMM(Java Memory Model),是一种基于计算机内存模型(定义了共享内存系统中多线程程序读写操作行为的规范)并屏蔽了各种硬件和操作系统的访问差异,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及原创 2020-11-03 21:01:16 · 520 阅读 · 0 评论 -
【并发编程】park与unpark、notify与notifyAll
文章目录1 线程状态简述2 wait和notify/notifyAll2.1 源码简析2.2 等待/通知机制2.3 生产者/消费者模式3 park与unpark参考资料1 线程状态简述Java线程在运行的生命周期中可能处于如下6种不同的状态,在给定的一个时刻,线程只能处于其中的一个状态。线程状态说明NEW初始状态,线程刚被创建,但是并未启动(还未调用start方法)。RUNNABLE运行状态,JAVA线程将操作系统中的就绪(READY)和运行(RUNNING)两种状态笼原创 2020-11-01 01:06:08 · 860 阅读 · 0 评论 -
【并发编程】深入理解synchronized原理
文章目录1 线程安全问题2 初识synchronized2.1 使用场景2.2 案例分析3 synchronized原理3.1 Java对象头3.2 锁记录3.3 Monitor原理4 synchronized进阶4.1 重量级锁4.2 自旋4.2.1 自旋锁4.2.2 适应性自旋锁4.3 锁消除与锁粗化4.3.1 锁消除4.3.2 锁粗化4.4 偏向锁4.5 轻量级锁4.6 锁膨胀/锁升级5 简析CAS6 写在最后参考资料1 线程安全问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间原创 2020-10-29 22:24:09 · 1541 阅读 · 5 评论 -
【并发编程基础】线程基础(常用方法、状态)
文章目录1 线程状态简述2 Thread类常用方法2.1 start()与run()2.2 sleep()与yield()2.2.1 sleep()2.2.2 yield()2.3 wait()2.4 join()2.5 interrupt()(1)判断线程是否被中断(2)如何中断线程(3)总结3 线程优先级4 守护线程参考资料1 线程状态简述Java线程在运行的生命周期中可能处于如下6种不同的状态,在给定的一个时刻,线程只能处于其中的一个状态。线程状态说明NEW初始状态,线程刚原创 2020-10-27 00:33:22 · 260 阅读 · 0 评论 -
【并发编程基础】线程上下文切换
文章目录1.1 概念1.2 案例说明1.3 切换查看1.4 切换原因1.5 减少上下文切换参考资料1.1 概念单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。(时间片是CPU分配给各个线程的时间,因为时间片非常短,一般是几十毫秒,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的)。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态原创 2020-10-22 16:47:31 · 608 阅读 · 0 评论