![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 97
JWASX
只是一个想写代码的小白
展开
-
java并发编程(7) 共享模型之工具 - stampedLock、semaphore、CountdownLatch、CyclicBarri
文章目录前言1. stampedLock1. 概述2. 代码1. 读读2. 读写3. 注意2. Semaphore1. 基本使用2. 应用场景3. 原理3. CountdownLatch1. 介绍2. 使用3. 应用之等待多线程加载完毕4. 应用之等待多个远程调用结束4. CyclicBarrier1. 概念2. 基本使3. 业务场景前言这篇文章讨论读写锁stampedLock。文章根据《Java并发编程的艺术》这本书以及黑马的视频 黑马多线程 做的笔记。1. stampedLock1. 概述原创 2022-02-08 22:57:04 · 367 阅读 · 0 评论 -
java并发编程(7) 共享模型之工具 - 读写锁ReentrantReadWriteLock
文章目录前言1. 使用ReentrantReadWriteLock1. 读读并发2. 读写互斥3. 写写互斥4. 使用的注意事项2. 应用之缓存1. 问题2. 解决3. 注意3. 原理图解流程前言这篇文章讨论读写锁。文章根据《Java并发编程的艺术》这本书以及黑马的视频 黑马多线程 做的笔记。1. 使用ReentrantReadWriteLock当读操作远远高于写操作时,这时候使用读写锁让读-读可以并发,提高性能。ReentrantReadWriteLock 内部包含两个锁,一个是读锁,一个是写原创 2022-02-07 21:14:20 · 681 阅读 · 0 评论 -
java并发编程(7) 共享模型之工具 - AQS + ReentrantLock
文章目录前言1. AQS1. 概念2. 代码2. ReentrantLock 原理1. 非公平锁实现原理1. 加锁流程1. 成功流程2. 失败流程2. 解锁流程1. 成功解锁2. 失败解锁2. 可重入原理3. 可打断原理1. 不可打断模式2. 可打断模式4. 公平锁1. 对比以下非公平锁2. 公平锁5. 条件变量实现原理1. await 流程2. signal 流程前言这篇文章讨论JDK中提供的 AQS接口以及其中一个实现类ReentrantLock。文章根据《Java并发编程的艺术》这本书以及黑马的原创 2022-02-06 20:32:58 · 340 阅读 · 0 评论 -
java并发编程(7) 共享模型之工具 - JDK中的线程池
文章目录前言1. ThreadPoolExecutor1. 线程池状态2. 构造方法3. 工作方式4. 工厂方法1. newFixedThreadPool2. newCachedThreadPool3. newSingleThreadExecutor4. 使用提供的线程池的弊端5. 提交任务1. submit2. invokeAll3. invokeAny6. 关闭线程池1. shutdown2. shutdownNow前言从(7)开始讨论一些工具,这篇文章讨论JDK中的线程池。文章根据《Java并发原创 2022-02-05 22:08:44 · 501 阅读 · 0 评论 -
java并发编程(7) 共享模型之工具 - 自定义线程池
文章目录前言1. 线程池2. 线程池自定义步骤1:自定义拒绝策略接口步骤2:自定义任务队列1. 任务队列参数定义2. 任务队列获取任务3. 任务队列添加任务4. 任务队列其他方法5. 任务队列全部代码步骤3:自定义线程池1. 线程池的参数2. 线程池包装了的线程3. 线程池的执行方法步骤4:测试前言从(7)开始讨论一些工具,现在第一篇就以自定义一个线程池开头。文章根据《Java并发编程的艺术》这本书以及黑马的视频 黑马多线程 做的笔记。1. 线程池Java 中的线程池是运用场景最多的并发框架,几原创 2022-02-05 00:10:16 · 252 阅读 · 0 评论 -
java并发编程(6) 共享模型之不可变
文章目录前言1. 日期转换的问题2. 不可变设计1. String类的设计:保护性拷贝前言从(6)开始讨论一些不可变类。文章参考《Java并发编程的艺术》这本书以及黑马的视频 黑马多线程。1. 日期转换的问题对于日期类 SimpleDateFormat,由于 SimpleDateFormat 不是线程安全的,所以在多线程情况下,SimpleDateFormat 这个类的使用可能会出现异常,下面来演示这种情况: private static void test1() { Sim原创 2022-02-04 16:11:50 · 587 阅读 · 0 评论 -
java并发编程(5) 共享模型之无锁(原子类)
文章目录前言1. 问题引出2. CAS 和 volatile1. CAS2. volatile3. 为什么无锁效率高前言从(5)开始讨论无锁的内容,也就是CAS。文章参考《Java并发编程的艺术》这本书以及黑马的视频。无锁对于一个程序的性能提高起到很重要的作用。1. 问题引出现在我们来看一段代码,有如下需求,保证 account.withdraw 取款方法的线程安全。程序中定义了1000个线程来进行取款的操作,下面使用 synchronized 来保证线程安全 使用 Synchrinized原创 2022-02-04 12:36:39 · 601 阅读 · 0 评论 -
java并发编程(4) 有序性 - 聊聊单例模式和volatile的关系
文章目录前言1. 双重检查锁的单例模式2. 重排序的影响(源)1. 单线程下2. 多线程下3. 使用 volatile 的方案4. 基于类初始化的解决方案1. 总体概述前言在多线程中,实现单例最简单的方式除了枚举,就是双重锁鉴定了,如何了解单例模式的应该都知道单例模式要配合 volatile 关键字一起使用,那么为什么要这样?其实这和其中的重排序有关,这篇文章就来讨论讨论这个问题,当然在这之前你必须要有重排序的相关知识。文章参考《Java并发编程的艺术》这本书,这篇文章和 volatile ,以及原创 2022-02-03 14:07:14 · 978 阅读 · 0 评论 -
java并发编程(4) 有序性-happens -before
文章目录前言1. JMM 的设计2. happens - before 的定义3. happens - before 规则所有规则说明前言happens - before 是JMM 最核心的概念。对于Java程序员来说,理解 happens - before 是理解 JMM 的关键。文章参考《Java并发编程的艺术》这本书,这篇文章和 volatile ,以及 指令重排序 一起看效果更好。 1. JMM 的设计首先从 JMM 的设计意图出发。从 JMM 设计者的角度出发,在设计 JMM 内存模型原创 2022-02-03 10:49:43 · 627 阅读 · 0 评论 -
java并发编程(4) 有序性-顺序一致性
文章目录前言1. 数据竞争与顺序一致性2. 顺序一致性模型1. 理解2. 例子3. 例子总结3. 同步程序的顺序一致性效果4. 非同步程序的执行特性前言顺序一致性内存模型是一个理论参考模型,在设计的时候,处理器的内存模型和编程语言的内存都会以顺序一致性内存模型作为参考。现在以《Java并发编程的艺术》这本书为参考,一起来聊聊这个模型。这篇文章和 volatile ,以及 指令重排序 一起看效果更好 1. 数据竞争与顺序一致性当程序未正确同步的时候就会发生数据竞争。Java 内存模型规范对数据竞争原创 2022-02-02 17:15:04 · 758 阅读 · 0 评论 -
java并发编程(4) 有序性-详细说说volatile
文章目录前言一. 引入二. volatile的应用1. volatile的定义和实现原理1 CPU 术语2 volatile实现原理2. volatile的使用优化1 为什么追加到4字节可以提高并发效率2 什么情况不能追加到64字节三. volatile 的内存语义1. volatile 读写的特性2. volatile写-读建立的happens-before关系3. volatile 写-读的内存语义前言在这篇文章中对 volatile 进行说明,这个关键字在很久之前就想写一篇文章了,在《Java并原创 2022-01-31 16:30:38 · 1312 阅读 · 0 评论 -
java并发编程(4) 有序性-指令重排序
文章目录前言1. 概念2. 数据依赖性3. as-if-serial1. 概念和理解2. 例子前言这一系列资料基于黑马的视频:java并发编程,这篇文章中介绍指令重排序以及如何解决这个问题。同时参考了《Java并发编程这本书》,程序员必备1. 概念重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。比如下面的一段代码://重排序前int i = 0;int j = 1;//重排序后int j = 1;int i = 0;这段赋值的代码重排序之后可能顺序原创 2022-01-29 12:44:29 · 1588 阅读 · 0 评论 -
java并发编程(4) JMM + 可见性
文章目录前言1. Java内存模型2. 可见性1. volatile 初体验2.可见性 vs 原子性1. 什么是原子性2. 可见性 vs 原子性3. 两阶段终止-volitatile4. 同步模式之balking前言这一系列资料基于黑马的视频:java并发编程,目前还没有看完,整体下来这是我看过的最好的并发编程的视频。下面是根据视频做的笔记。在下面的笔记中,还穿插 Java 并发编程这本书的讲解,从4开始,里面涉及的知识点有很多都是《Java并发编程的艺术》这本书涉及到的,所以写的时候每一篇文章的原创 2022-01-29 00:10:44 · 737 阅读 · 0 评论 -
java并发编程(3) 共享模型之管程 4
文章目录前言1. 活跃性1. 死锁问题3. 哲学家就餐问题前言这一系列资料基于黑马的视频:java并发编程,目前还没有看完,整体下来这是我看过的最好的并发编程的视频。下面是根据视频做的笔记。在下面的笔记中,还穿插 Java 并发编程这本书的讲解1. 活跃性1. 死锁问题部分资料引用《Java并发编程的艺术》一书在使用锁的时候,如果对于锁的使用不正确,那么容易造成死锁。比如线程 t1 获取到了 A 的锁,然后再想要获取 B 的锁,而线程 t2 获取到了 B 的锁,想要获取 A 的锁。这时候原创 2022-01-26 01:06:56 · 225 阅读 · 0 评论 -
java并发编程(3) 共享模型之管程 3
文章目录前言1. wait和notify1. 原理2. Api介绍3. wait notify 的正确姿势2. 保护性暂停(线程一一对应)前言这一系列资料基于黑马的视频:java并发编程,目前还没有看完,整体下来这是我看过的最好的并发编程的视频。下面是根据视频做的笔记。1. wait和notify1. 原理主线程发现条件不足的时候可以调用wait方法,让线程进入WaitSet变成WAITING状态,进行阻塞,等到notify或者notifyAll的时候才会唤醒,这时候唤醒的线程进入Entry原创 2022-01-22 12:13:24 · 222 阅读 · 0 评论 -
java并发编程(3) 共享模型之管程 2
文章目录前言1. 变量的线程安全分析1. 成员变量和静态变量是否线程安全?2. 局部变量是否线程安全?3. 局部变量线程安全分析2. 线程常见类1. 线程安全类方法的组合2. 不可变类线程安全性3. 是否线程安全的几个例子4. 习题分析(卖票和转账)3. Monitor概念3.1 Java 对象头3.2 Monitor锁3.3 synchronized原理3.4 原理之 synchronized 进阶1. 轻量级锁2. 锁膨胀3. 自旋优化4. 偏向锁5. 偏向状态6. 偏向锁撤销7. 批量重偏向前言原创 2022-01-20 23:17:31 · 357 阅读 · 0 评论 -
java并发编程(3) 共享模型之管程 1
文章目录前言1. java的内存模型1. 并发编程的两个问题2. Java内存模型的抽象结构2. 问题分析3. 临界区和竞态条件1 临界区 Critical Section2 竞态条件4. 解决方法1. synchronized2. 使用方法3. 理解4. 使用面向对象改造代码5. synchronized加在方法上6. 线程8锁1. 先一后二或者先二后一2. 1秒后12,或者2然后1秒后再13. 加多一个普通方法4. 锁的是不同对象5. 静态方法6. 锁当前类对象7. 两个对象,一个线程锁对象原创 2022-01-18 17:49:43 · 263 阅读 · 0 评论 -
java并发编程(1) 进程与线程
文章目录前言进程与线程1.1 进程1.2 线程1.3 二者对比1.4 并行与并发前言这一系列资料来源于黑马的视频:java并发编程,目前还没有看完,整体下来这是我看过的最好的并发编程的视频。下面是根据视频做的笔记。进程与线程1.1 进程程序由指令和数据组成,但是这些指令要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令管理内存管理IO的当一个指令被运行,从磁盘加载这个程序的代码到内存,这时候就开启了一个进程进程就原创 2022-01-18 10:13:06 · 98 阅读 · 0 评论 -
java并发编程(2) java线程2
文章目录前言1、sleep和yield1、sleep+interrupt2、yield2、线程优先级3、常见方法1. sleep2. join3. interrupt1. 打断 sleep,wait,join 的线程2. 打断正常线程3. 多线程设计模式:两阶段终止模式前言这一系列基于黑马的视频:java并发编程,目前还没有看完,整体下来这是我看过的最好的并发编程的视频。1、sleep和yield1、sleep+interrupt调用 sleep 会让当前线程从 Running 进入 Tim原创 2022-01-18 09:32:45 · 242 阅读 · 0 评论 -
java并发编程(2) java线程1
文章目录前言1、创建多线程的三种方法前言这一系列基于黑马的视频:java并发编程,目前还没有看完,整体下来这是我看过的最好的并发编程的视频。1、创建多线程的三种方法原创 2022-01-17 23:36:40 · 281 阅读 · 0 评论