Java多线程相关
文章平均质量分 93
用于Java多线程相关知识总结
Slek_Xu
基于SpringCloud的微服务开发
展开
-
【Java】多线程导图
目录一、线程基础知识二、多线程编程串行、并发和并行竞态线程安全性原子性可见性有序性上下文切换三、一、线程基础知识二、多线程编程串行、并发和并行竞态线程安全性原子性可见性有序性上下文切换三、...原创 2020-03-29 15:50:49 · 120 阅读 · 0 评论 -
Java并发基础—1、可见性、原子性和有序性:并发编程故障的源头
并发问题的根源这些年,我们的 CPU、内存、I/O 设备都在不断迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异。CPU 和内存的速度差异可以形象地描述为:CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间)。内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。程序里大部分语句都要访问内存,有些还要访问 I/O,根据木桶理...原创 2021-11-11 23:33:10 · 142 阅读 · 0 评论 -
Java并发基础—2、Java内存模型:Java如何解决可见性和有序性问题
什么是Java内存模型(JMM)你已经知道,导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了。合理的方案应该是按需禁用缓存以及编译优化。那么,如何做到“按需禁用”呢?对于并发程序,何时禁用缓存以及编译优化只有程序员知道,那所谓“按需禁用”其实就是指按照程序员的要求来禁用。所以,为了解决可见性和有序性问题,只需要提供给程序员按需禁用缓存和编译优化的方法即可。...原创 2021-11-12 00:00:06 · 145 阅读 · 0 评论 -
Java并发基础—3、互斥锁:解决原子性问题
一、互斥锁互斥锁的目的:解决原子性问题,即“资源在同一时刻只能被一个线程占有” 根本方法就是禁止线程切换(单核场景)或者同一时刻线程互斥(多核场景)临界区:需要互斥执行的代码称为“临界区”,进入/离开临界区,需要加锁/解锁操作。锁的对象:即需要被放入临界区的对象,主要逻辑如下:注意:锁住的对象必须明确范围:如果范围太大可能导致锁不生效(直接被JVM逃逸分析优化掉了),或者“强行串行”导致性能下降 如果范围太小也可能导致锁不生效,或死锁 锁住的对象...原创 2021-10-30 00:07:30 · 395 阅读 · 0 评论 -
浅析关键字synchronized
volatile 只能保证内存可见性(线程A对volatile变量的操作,线程B可见),但无法保证复合操作的原子性(线程A和线程B同时对volatile变量做操作,无法保证原子性)synchronized主要有4种加锁方式: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修饰一个...原创 2021-02-04 23:28:40 · 106 阅读 · 0 评论