作者: 蓝师傅_Android
原文: https://juejin.im/post/5d7da37d6fb9a06b0202f156
多线程并发问题,基本是面试必问的 。
大部分同学应该都知道Synchronized,Lock,部分同学能说到volatile、并发包,优秀的同学则能在前面的基础上,说出Synchronized、volatile的原理,以及并发包中常用的数据结构,例如ConcurrentHashMap的原理 。
这篇文章将总结多线程并发的各种处理方式,希望对大家有所帮助 。
一、多线程为什么会有并发问题
为什么多线程同时访问(读写)同个变量,会有并发问题?
- JAVA 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存 。
- 线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存 。
- 线程访问一个变量,首先将变量从主内存拷贝到工作内存,对变量的写操作,不会马上同步到主内存 。
- 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行 。
Java 内存模型(JMM) 作用于工作内存(本地内存)和主存之间数据同步过程,它规定了如何做数据同步以及什么时候做数据同步,如下图 。

文章插图
三、并发三要素
原子性:在一个操作中,CPU 不可以在中途暂停然后再调度,即不被中断操作,要么执行完成,要么就不执行 。
可见性:多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值 。
有序性:程序执行的顺序按照代码的先后顺序执行 。
四、怎么做,才能解决并发问题?(重点)
下面结合不同场景分析解决并发问题的处理方式 。
一、volatile
推荐阅读
- 华为手机双十一会降价吗2021
- 一 世界上的大城市人口排名(2020年)(2020世界人口最多的城市前十名)
- 日本一个苹果多少钱 日本最贵的苹果多少钱一个
- 细解阳台装修风水的讲究
- 好孩子婴儿床价格多少
- 单人气垫床价格是多少
- 淘宝开店要交多少费用吗 淘宝开店每年需要交钱吗
- 皮床报价是多少
- 红豆炖排骨汤的功效有哪些?
- 炖排骨有腥味怎么补救?
