Java 并发编程
Java 并发编程
南京.
北漂的程序仔
展开
-
Java 并发 (15) -- 线程池
文章目录1. 简介1. 线程池的好处2. excute() 的执行流程3. execute() 方法和 submit() 方法的区别4. 线程池的 7 个属性5. 创建线程池6. 线程池中的线程创建时机7. Executors.newFixedThreadPool(…) 和 Executors.newCachedThreadPool() 构造出来的线程池的区别8. 任务执行过程中发生异常怎么处理...原创 2020-05-07 15:54:15 · 384 阅读 · 1 评论 -
Java 并发 (14) -- 原子类
文章目录1. 简介1. atomic 的原理2. 精讲1. Striped64 类的实现 1. 简介 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子操作特征的类 JUC 包的原子类都存放在 JUC 的 atomic 子包下。根据操作的数据类型,可以将 JUC 包中的原子类分为 4 类: 基本类...原创 2020-05-07 15:53:57 · 118 阅读 · 0 评论 -
Java 并发 (13) -- Fork/Join 框架
文章目录1. 简介2. 精讲1. 什么是 Fork/Join 框架2. 工作窃取算法3. Fork/Join 框架的设计4. 使用 Fork/Join 框架5. Fork/Join 框架的异常处理6. Frok/Join 框架的实现原理1. ForkJoinTask 的 fork() 方法实现原理2. ForkJoinTask 的 join() 方法实现原理 1. 简介 Fork/Join 并...原创 2020-05-06 20:18:18 · 163 阅读 · 0 评论 -
Java 并发 (12) -- Exchanger 类
文章目录1. 简介2. 精讲1. 概念2. 应用场景3. 示例4. 实现1. exchange(V x) 1. 简介 Exchanger 允许在并发任务之间交换数据。具体来说,Exchanger 类允许在两个线程之间定义同步点。当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中;或者这么说,它提供一个同步点,在这个同步...原创 2020-05-06 20:06:06 · 257 阅读 · 0 评论 -
Java 并发 (11) -- CyclicBarrier 类
文章目录1. 简介2. 精讲1. 概念2. 实现1. 构造器2. await()3. 应用场景4. 示例 1. 简介 CyclicBarrier 是一个同步辅助类,他会让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,然后所有被屏障拦截的线程才会继续往下执行 CyclicBarrier 的内部是使用重入锁 ReentrantLock 和 Condition Cy...原创 2020-05-06 20:02:00 · 156 阅读 · 0 评论 -
Java 并发 (10) -- CountDownLatch 类
文章目录1. 简介2. 精讲1. 概念2. 实现1. 构造器2. await()3. countDown()4. 总结3. 应用场景4. 示例 1. 简介 CountDownLatch 是通过一个计数器来实现的,当我们在 new 一个 CountDownLatch 对象的时候需要传入该计数器值,该值就表示了线程的数量。每当一个线程完成自己的任务后,计数器的值就会减 1。当计数器的值变为 0 时...原创 2020-05-06 19:59:02 · 193 阅读 · 0 评论 -
Java 并发 (9) -- Semaphore 类
文章目录1. 简介2. 精讲1. 概念2. 实现1. 构造器2. acquire()3. release()3. 示例 1. 简介 synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,而 Semaphore 可以指定多个线程同时访问某个资源,和 CountDownLatch 一样,其本质上是一个 “共享锁”,它通常用于限制可以访问某些资源的线程数目 Se...原创 2020-05-06 19:55:47 · 99 阅读 · 0 评论 -
Java 并发 (8) -- ReentrantReadWriteLock 类
文章目录1. 简介2. 精讲1. 读写锁的概念1. ReentrantReadWriteLock 的特性2. 读写锁的具体实现1. 读锁状态的设计2. 锁的获取1. 写锁的获取2. 读锁的获取3. 总结3. 锁的释放1. 写锁的释放2. 读锁的释放3. 总结3. ReentrantReadWriteLock 中的其他方法1. getOwner()2. getReadLockCount()3. ge...原创 2020-05-06 18:49:43 · 200 阅读 · 0 评论 -
Java 并发 (6) -- 队列同步器 AQS
文章目录1. 简介2. 精讲1. AQS 概念2. 队列同步器的接口3. 队列同步器的源码分析1. 同步队列1. AQS 中的成员变量4. 独占模式1. 独占式同步状态获取:不响应中断2. **独占式同步状态的释放**3. 以上两点的总结4. 独占式获取同步状态:可响应中断5. 独占式超时获取同步状态5. 共享模式1. 共享式获取同步状态(不响应中断)2. 共享式获取同步状态(响应中断)3. 共...原创 2020-05-06 18:36:21 · 257 阅读 · 0 评论 -
Java 并发 (7) -- ReentrantLock 类
文章目录1. 简介2. 精讲1. 重入锁概念2. ReentrantLock 与 synchronized 的对比1. synchronized 回顾2. ReentrantLock 和 synchronized 的比较3. 重入锁的一个简单案例3. 源码分析1. 继承体系2. 获取锁3. 释放锁4. 公平锁与非公平锁 1. 简介 在 Java 5.0 之前,协调对共享对象的访问可以使用的机制只有...原创 2020-05-06 18:07:46 · 169 阅读 · 0 评论 -
Java 并发 (5) -- happen - before 规则
文章目录1. 简介2. 精讲1. 案例2. JMM 与 happen - before 规则3. happens-before 的定义4. happens-before 规则的几个案例 1. 简介 倘若在程序开发中,仅靠 sychronized 和 volatile 关键字来保证原子性、可见性以及有序性,那么编写并发程序可能会显得十分麻烦。幸运的是,在 Java 内存模型中,还提供了 happen...原创 2020-05-06 17:51:21 · 316 阅读 · 0 评论 -
Java 并发 (4) -- volatile 关键字
文章目录1. 简介2. 精讲1. volatile 的作用1. volatile 保证可见性2. volatile 禁止指令重排序2. volatile 写-读 建立的 happens - before 关系3. volatile 读-写 的内存语义4. volatile 的内存语义1. JSR-133 为什么要增强 volatile 的内存语义 1. 简介 volatile 是 Java 虚...原创 2020-05-06 17:38:54 · 115 阅读 · 0 评论 -
Java 并发 (3) -- Synchronized 关键字
文章目录1. 简介2. 精讲1. 概念2. synchronized 的三种应用1. 修饰实例方法2. 修饰静态方法3. 修饰代码块3. synchronized 底层原理1. Java 对象头与 Monitor2. synchronized 代码块底层原理3. synchronized 方法底层原理4. JDK 1.6 synchronized 的优化1. 偏向锁2. 轻量级锁3. 自旋锁4. ...原创 2020-05-06 17:28:50 · 143 阅读 · 0 评论 -
Java 并发 (2) -- ThreadLocal 类
文章目录1. 简介2. 精讲1. ThreadLocal 是什么2. ThreadLocal 源码分析1. ThreadLocalMap1. getEntry()2. set()2. ThreadLocal1. get()2. set(T value)3. initialValue()4. remove()3. ThreadLocal 为什么会有内存泄漏1. 手动释放 ThreadLocal 遗留...原创 2020-05-06 17:13:07 · 151 阅读 · 0 评论 -
Java 并发 (1) -- 多线程基础
文章目录1. 简介1. 并发与并行的区别2. 进程和线程3. 守护线程是什么4. 死锁 、活锁和饥饿5. Java 中用到的线程调度算法有哪些6. 线程组是什么7. 多线程的上线文切换8. 创建线程的几种方式9. Runnable 与 Callable 的区别10. 线程的状态(生命周期)11. sleep() 和 wait() 的区别12. 为什么 notify() 、wait() 等方法定义在...原创 2020-05-06 16:45:53 · 264 阅读 · 0 评论