![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
juc多线程
文章平均质量分 90
java多线程学习专栏
RobotZero
这个作者很懒,什么都没留下…
展开
-
多线程番外篇-CAS操作
1.1 什么是CAS? 使用锁时,线程获取锁是一种悲观锁策略,即假设每一次执行临界区代码都会产生冲突,所以当前线程获取到锁的时候同时也会阻塞其他线程获取该锁。而CAS操作(又称为无锁操作)是一种乐观锁策略,它假设所有线程访问共享资源的时候不会出现冲突,既然不会出现冲突自然而然就不会阻塞其他线程的操作。因此,线程就不会出现阻塞停顿的状态。那么,如果出现冲突了怎么办?无锁操作是使用**CAS(compare and swap)**又叫做比较交换来鉴别线程是否出现冲突,出现冲突就重试当前操作直到没有冲突为止。 1原创 2021-12-09 16:32:29 · 182 阅读 · 0 评论 -
多线程番外篇-锁升级、偏向锁
从JDK1.6开始,synchronized锁的实现发生了很大的变化;JVM引入了相应的优化手段来提升synchronized锁的性能,这种提升涉及到偏向锁,轻量级锁以及重量级锁,从而减少锁的竞争带来的用户态与内核态之间的切换;这种锁的优化实际上是通过java对象头中的一些标志位去实现的;对于锁的访问与改变,实际上都是与java对象头息息相关。 对象实例在堆中会被划分为三个部分:对象头,实例数据与对其填充。对象头也是由三块内容来构成:1.Mark Word 2.指向类的指针 3.数组长度 其中Mark W原创 2021-11-27 14:32:26 · 354 阅读 · 0 评论 -
JUC之共享模型无锁
导航 1、多线程学习一 6. 共享模型之无锁 管程即monitor是阻塞式的悲观锁实现并发控制,这章我们将通过非阻塞式的乐观锁的来实现并发控制 6.1 问题提出 有如下需求,保证account.withdraw取款方法的线程安全 Test5.java public class Test5 { public static void main(String[] args) { Account.demo(new AccountUnsafe(10000)); } } class原创 2021-11-27 14:12:06 · 592 阅读 · 0 评论 -
JUC之共享模型内存
导航 1、多线程学习一 2、多线程学习二 5. 共享模型之内存 上一章讲解的 Monitor 主要关注的是访问共享变量时,保证临界区代码的原子性。这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题 5.1 Java 内存模型 JMM 即 Java Memory Model,它从java层面定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上下文切换的影响 可见性原创 2021-11-27 14:11:49 · 292 阅读 · 0 评论 -
JUC之线程池ThreadPoolExecutor
8. 共享模型之工具 8.1 线程池 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线原创 2021-11-27 14:10:34 · 454 阅读 · 0 评论 -
JUC之synchronized详解
导航 1、多线程学习一 本节主要讲述synchronized的原理以及锁级别,锁变化 4.1 线程出现问题的根本原因分析 线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了,下面举一个例子 Test13.java static int count = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread原创 2021-11-27 14:01:03 · 294 阅读 · 0 评论 -
JUC之Thread详解
多线程学习一 1 概述 一般的工作当中是不需要接触并发,但是我们不能单纯的做一个CRUD大师,还是需要强化一下自己的技能,技术越好,后面的路越是平坦。新生代农名工让我们一起来深入学习吧!此内容来源于B站黑马程序员。仅用于学习记录 2.1 进程与进程 进程 程序由指令和数据组成,但是这些指令要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令管理内存管理IO的 当一个指令被运行,从磁盘加载这个程序的代码到内存,这时候就开启了一个进程原创 2021-11-27 13:46:37 · 221 阅读 · 0 评论