并发编程
星辰之眼
放弃不难,但坚持一定很酷!
展开
-
《实战Java高并发程序设计》——无锁编程
文章目录一、悲观锁和乐观锁(CAS)1.1 悲观锁1.2 乐观锁二、比较并交换(CAS)2.1 步骤2.2 优点2.3 缺点三、AtomicInteger3.1 介绍3.2 相关方法3.3 代码示例3.4 AtomicInteger和使用锁的性能比较四、AtomicReference4.1 简介4.2 示例五、AtomicStampReference5.1 简介5.2 新增API(相对于AtomicReference)5.3 示例六、AtomicIntegerArray6.1 简介6.2 核心API6.3原创 2020-12-29 00:05:41 · 315 阅读 · 2 评论 -
《实战Java高并发程序设计》——锁优化
文章目录一、提高锁性能的建议1.1 减小锁的持有时间1.2 减小锁粒度1.3 读写锁替换独占锁1.4 锁分离1.5 锁粗化二、JVM中的锁优化2.1 锁偏向2.2 轻量级锁2.3 自旋锁2.4 锁消除 一、提高锁性能的建议 1.1 减小锁的持有时间 尽量在关键代码部分持有锁,防止在持锁过程中执行大量非关键代码。 即尽可能减少某个锁的占有时间,以减少线程间互斥的可能性,进而提升系统的并发能力。 public synchronized void syncMethod(){ otherCode1(); /原创 2020-12-26 21:16:19 · 174 阅读 · 1 评论 -
《实战Java高并发程序设计》笔记——ThreadLocal
文章目录一、简单的使用1.1 是什么1.2 示例1.3 解决方案二、实现原理2.1 set() 方法2.2 get() 方法2.3 ThreadLocal 导致内存泄漏三、对性能的帮助3.1 说明3.2 代码示例 一、简单的使用 1.1 是什么 ThreadLocal是一个线程的局部变量,只有当前线程可以访问,因为只有当前线程可以访问,所以是线程安全的。 1.2 示例 1、举例 多线程环境中使用SimpleDateFormat 解析日期 2、代码 public class SimpleDateFormat原创 2020-12-24 12:03:20 · 116 阅读 · 0 评论 -
《实战Java高并发程序设计》笔记——线程池
文章目录一、线程池概念1.1 为什么需要线程池1.2 池化思想二、JDK对线程池的支持2.1 Executor框架结构图2.2 Executor框架提供的线程池三、线程池的核心实现3.1 构造函数3.2 核心参数3.3 任务队列3.3.1 SynchronousQueue(直接提交的队列)3.3.2 ArrayBlockingQueue(有界的任务队列)3.3.3 LinkedBlockingQueue(无界任务队列)3.3.4 PriorityBlockingQueue(优先任务队列)3.4 默认线程池的原创 2020-12-23 00:28:15 · 144 阅读 · 0 评论 -
Java 并发入门
文章目录一、Volatile关键字1. 不使用任何同步手段2. 使用synchronized3. 使用 `volatile` 关键字4. 总结二、原子类1. 常规2. 代码二,使用 `volatile` 关键字3. 代码三:使用原子类三、模拟CAS算法四、CopyOnWriteArrayList1. 代码一:使用普通的ArrayList2.代码二:使用CopyOnWriteArrayList3.总结五、CountDownLatch六、Callable创建线程七、Lock锁八、生产者—消费者模型九、交替打印A原创 2020-09-06 23:43:12 · 152 阅读 · 0 评论 -
《实战Java高并发程序设计》笔记——同步工具类
文章目录一、可重入锁ReentrantLock1.1 什么是可重入锁1.2 为什么叫做可重入1.3 可重入锁的高级功能1.3.1 中断响应1.3.2 限时等待1.3.3公平锁1.4 相关方法1.5 可重入的三要素二、 Condition重入锁搭档2.1 介绍2.2 相关方法2.3 代码示例三、Semaphore信号量3.1 信号量和锁的区别3.2 主要方法3.3 代码示例四、ReadWriteLock读写锁4.1 读写锁和普通锁的区别4.2 读写锁的访问约束情况4.3 适用情况4.4 代码示例五、Count原创 2020-09-30 16:05:28 · 196 阅读 · 0 评论 -
《实战Java高并发程序设计》笔记——Java并行程序基础
文章目录一、线程基础知识1.1 进程是什么1.2 线程是什么1.3为什么使用线程1.4 线程的生命周期二、线程基础操作2.1 新建线程2.1.1 如何创建线程2.1.2 调用start()和调用run()的区别2.2 终止线程2.2.1 stop()方法2.2.2 为什么不推荐使用stop()方法2.3 线程中断2.3.1 线程中断2.3.2 与线程中断有关的方法2.3.3 sleep()方法2.3.4 sleep()由于中断而导致的问题2.4 等待(wait)和通知(notify)2.4.1 wait()原创 2020-09-30 01:34:57 · 129 阅读 · 0 评论 -
《实战Java高并发程序设计》笔记——并行基础概念
文章目录一、相关概念1、同步和异步2、并发和并行3、临界区4、阻塞和非阻塞5、死锁、饥饿和活锁二、并发级别1、阻塞2、无饥饿3、无障碍4、无锁5、无等待三、JMM1、原子性2、可见性3、有序性4、Happen-Before 原则 一、相关概念 1、同步和异步 同步:线程 A 调用一个方法,必须等到方法调用返回后,线程A才能继续运行 异步:线程 A 调用一个方法,然后继续执行;而这个方法一般会在另一个线程 B 中执行。整个过程中,这个方法不会阻碍线程 A 的工作 2、并发和并行 并行:多个任务同时执行 并发原创 2020-09-15 01:32:29 · 124 阅读 · 0 评论