文档章节

Java 并发编程原理

aelchao
 aelchao
发布于 09/26 22:31
字数 400
阅读 10
收藏 0

为什么要使用多线程?

  1. 通过多线程提高吞吐量
  2. 伸缩性比较好,可以增加 CPU 核心来提高程序性能

什么场景下使用多线程?

如:tomcat BIO

Java 如何实现多线程?

Thread、Runnable、ExecutorService、future callable

线程安全问题

原子性

有序性:编译器的重排序和 CPU 的指令重排序

  1. CPU 的指令重排序,高速缓存在线程并行的情况下,出现缓存不一致,可以使用总线锁、缓存锁。内存屏障:写屏障、读屏障、完全内存屏障 CPU 内存关系图

  2. 编译器的重排序,使用 hsdis 插件解释为汇编指令,参数如下:

    	-Xcomp 
    	-XX:+UnlockDiagnosticVMOptions 
    	-XX:+PrintAssembly 
    	-XX:CompileCommand=dontinline,*VolatileDemo.main 
    	-XX:CompileCommand=compileonly,*VolatileDemo.main
    

    VolatileDemo 部分汇编代码

  3. JVM 源码,lock 指令调用 volatile 虚拟机源码

可见性:一个线程对共享变量的修改对另外一个线程不可见

如下示例,如果 stop 不增加 volatile,则线程中循环无法停止。 VolatileDemo

产生线程安全的本质

  1. 把当前处理的缓存行的数据写回到系统内存
  2. 使得其他的 CPU 里面缓存的该内存地址的数据无效

lock 机制

volatile、synchronized、final、JUC(Lock) monitorenter / monitorexit

  1. 原子性:synchronized atomic
  2. 有序性:synchronized
  3. 可见性:synchronized volatile atomic

volatile 作用:防止内存重排序(内存屏障)、保证可见性

© 著作权归作者所有

共有 人打赏支持
aelchao
粉丝 0
博文 2
码字总数 1216
作品 0
朝阳
私信 提问
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
8
高手问答第 217 期 —— 如何进阶 Java 并发编程?

OSCHINA 本期高手问答(2018 年 11 月 14 日 — 11 月 20 日)我们请来了@技术原始积累 翟陆续(加多)为大家解答关于 Java 并发编程方面的问题。 翟陆续(加多),资深 Java 开发工程师,著有...

局长
11/13
6.4K
47
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存、CPU、缓存等予以说明。实际上,在实...

leoliu168
11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解析Nuxt.js Vue服务端渲染摸索

本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 Nuxt.js 十分简单易用。一个简...

前端攻城老湿
12分钟前
1
0
深入解析React中的元素、组件、实例和节点

React 深入系列,深入讲解了React中的重点概念、特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React。 React 中的元素、组件、实例和节点,是React中关系密切的...

前端攻城小牛
27分钟前
2
0
菜鸟网络三面面经(java开发岗):Spring boot+JVM+线程池+中间件

一面 1、HaspMap底层原理?HaspTable和ConcurrentHashMap他们之间的相同点和不同点? 2、由上题提到锁的问题 3、MySQL的表锁&行锁&乐观锁&悲观锁,各自的使用场景 4、Java线程锁有哪些,各自的...

别打我会飞
31分钟前
4
0
NCL入门

;***这两行指令必须加载,类似于c语言中的库函数load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"begin ......

voole
35分钟前
1
0
程序员该如何把握黄金五年!

在Java业界流行着一种说法——黄金5年,就是从程序员入职时算起,前五年的工作选择直接影响整个职业生涯的职业发展和薪资走向。如何把握这五年,从一个刚入行的菜鸟蜕变成一个处事不惊的大佬...

James-
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部