没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:本文详细介绍了Java并发编程的核心概念和技术。首先阐述了多线程的基本概念及其带来的性能提升与潜在问题,如安全性、性能开销等。接着深入探讨了并发执行与并行执行的区别,强调了微观串行、宏观并行的特点。文章重点讲解了并发编程中的三大核心问题:不可见性、乱序性、非原子性,并介绍了Java内存模型(JMM)、工作内存与主内存的关系,以及volatile关键字的作用。随后讨论了如何通过锁机制(如synchronized、ReentrantLock)和原子变量(如AtomicInteger)来保证操作的原子性。此外,还介绍了多种锁的概念,包括乐观锁、悲观锁、可重入锁、读写锁、分段锁、自旋锁、共享锁/独占锁、公平锁/非公平锁、偏向锁、轻量级锁、重量级锁等。最后,文章讲解了AQS框架、ReentrantLock的实现原理、JUC常用类(如ConcurrentHashMap、CopyOnWriteArrayList)、辅助类CountDownLatch以及线程池的相关知识。 适合人群:有一定Java编程基础,特别是对多线程编程感兴趣的开发者;工作1-3年的Java工程师。 使用场景及目标:①理解多线程编程的优势与挑战;②掌握解决并发编程中不可见性、乱序性、非原子性问题的方法;③学会使用锁机制和原子变量保证线程安全;④熟悉Java并发工具包中的常见类和接口;⑤了解线程池的工作原理及其配置。 阅读建议:由于本文内容涵盖面广且技术性强,建议读者
资源推荐
资源详情
资源评论













Java 并发编程
多线程
Java 是最先支持多线程的开发的语言之一,Java 从一开始就支持了多线程
能力。由于现在的 CPU 已经多是多核处理器了,是可以同时执行多个线程的。
多线程优点
多线程技术使程序的响应速度更快 ,可以在进行其它工作的同时一直处于活动
状态,程序性能得到提升。
性能提升的本质 就是榨取硬件的剩余价值(硬件利用率)。
多线程带来的问题是什么?
安全性(访问共享变量),性能(切换开销等)
并行执行与并发执行
单核 cpu 下,线程实际是串行执行的。操作系统中有一个组件叫做任务调
度器,将 cpu 的时间片,分给不同的线程使用,只是由于 cpu 在线程间(时间片
很短)的切换非常快,人类感觉是同时运行的。
总结为一句话就是:微观串行,宏观并行,一般会将这种线程轮流使用 cpu

的做法称为并发,concurrent。
多核 cpu 下,每个核(core)都可以调度运行线程,这时候线程可以是并
行的。

大家排队在一个咖啡机上接咖啡,交替执行,是并发;两台咖啡机上面接咖啡,
是并行。
从严格意义上来说,并行的多任务是真的同时执行,而对于并发来说,这个过程
只是交替的,一会执行 任务 A,一会执行任务 B,系统会不停地在两者之间切
换。
并发执行说的是在一个时间段内,多件事情在这个时间段内交替执行。
并行执行说的是多件事情在同一个时刻同事发生。
并发编程核心问题--不可见性,乱序性,非原子性
不可见性
一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为不可见
性。
对于 java 内存模型来说,为每个线程提供工作内存(即缓存),当线程需要操作主内
存数据时,需要先将主内存数据加载到自己的工作内存,操作完成后再写回主内存,
那么如果两个线程同时执行,在一个线程修改数据后,另一个线程不能及时可见。
JMM

Java 内存模型(Java Memory Model,JMM)规范了 Java 虚拟机与计算
机内存是如何协同工作的。Java 虚拟机是一个完整的计算机的一个模型,因此
这个模型自然也包含一个内存模型——又称为 Java 内存模型。
JVM 主内存与工作内存
Java 内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工
作内存,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内
存中的变量。
这里的工作内存是 JMM 的一个抽象概念,也叫本地内存,其存储了该线程读 /
写共享变量的副本。
就像每个处理器内核拥有私有的高速缓存,JMM 中每个线程拥有私有的本地内存。
乱序性
为了优化性能,有时候会改变程序中语句的先后顺序。
cpu 的读等待同时指令执行是 cpu 乱序执行的根源。
读指令的同时可以同时执行不影响的其他指令。

非原子性
线程切换带来的非原子性问题
原子的意思代表着——“不可分”;
一个或多个操作在 CPU 执行的过程中不被中断的特性,我们称为原子性。
原子性是拒绝多线程交叉操作的,不论是多核还是单核,具有原子性的量,同一
时刻只能有一个线程来对它进行操作。
CPU 能保证的原子操作是 CPU 指令级别的,而不是高级语言的操作符。线程
切换导致了原子性问题
Java 并发程序都是基于多线程的,自然也会涉及到任务切换,任务切换的
时机大多数是在时间片结束的时候。我们现在基本都使用高级语言编程,高级语
剩余25页未读,继续阅读
资源评论


Rem'Rem
- 粉丝: 1720
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于PLC的火电厂输煤控制系统.doc
- 面向资源弹性调度与运维自动化的云资源池设计与规划.pptx
- 基于单片机的室内环境检测.docx
- 企业经营大数据分析案例.pptx
- 江西省企业财务会计信息网络报送系统企业操作手册样本.doc
- 最新操作系统分类专业知识讲座.ppt
- 基于单片机的篮球计分器设计.doc
- 物联网应用案例专业知识讲座.ppt
- vn.py-Python资源
- 基于ARM的新型智能交通信号灯系统设计..doc
- 网络与信息安全管理工作应急预案.doc
- 协同办公软件哪个好.pdf
- YKSpec-Swift资源
- 如何抓好收尾工程项目管理.doc
- 软件发开项目融资计划.pptx
- 数字图书馆系统中的IP网络存储技术研究.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
