文档章节

Java 并发编程原理

aelchao
 aelchao
发布于 09/26 22:31
字数 400
阅读 9
收藏 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并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎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
Java 编程之美:并发编程高级篇之一

本文来自作者 追梦 在 GitChat 上分享 「Java 编程之美:并发编程高级篇之一」 编辑 | 工藤 前言 借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了。 ...

gitchat
05/24
0
0
【Java并发专题】27篇文章详细总结Java并发基础知识

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! github:https://github.com/CL0610/Java-concurrency,欢迎题issue和Pull request。所有的文档都是自己亲自码的,如果觉...

你听___
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 入门 - 进阶篇(4)- REST访问(RestTemplate)

经常需要发送一个GET/POST请求到其他系统(REST API),通过JDK自带的HttpURLConnection、Apache HttpClient、Netty 4、OkHTTP 2/3都可以实现。 HttpClient的使用:http://rensanning.iteye.c...

onedotdot
27分钟前
2
0
Wi-Fi也有版本号了!

据Solidot消息,行业组织 Wi-Fi 联盟宣布当前的版本 Wi-Fi 802.11ac 重命名为 Wi-Fi 5,而下一个版本 802.11ax 重命名为 Wi-Fi 6,之前的版本 802.11n 改名为 Wi-Fi 4。 Wi-Fi 标准之前使用单...

linux-tao
29分钟前
3
0
项目经验不丰富、技术不突出的程序员怎么打动面试官?

前言 相信不少的程序员都有过类似的困惑:如果我没有大型的项目经历,也不能靠技术征服面试官,那我要怎么才能给面试官留下一个好印象呢? 按照本人的面试经验来说,面试主要看几点:项目经验...

Mamba1
39分钟前
4
0
MyBatis 源码分析----MyBatis 整体架构概要说明

MyBatis整体架构 MyBatis的整体架构分为三层1:基础支持层,2:核心处理层,3:接口层 1:基础支持层: 1-1反射模块: 该模块对Java 原生的反射进行了良好的封装,提供了更加简洁易用的API ,...

西瓜1994
45分钟前
7
0
如何让 J2Cache 在多种编程语言环境中使用

现在的系统是越来越复杂了,不仅仅是功能复杂,系统结构也非常复杂,而且经常在一个系统里包含几种不同语言编写的子系统。例如用 JavaScript 做前端开发、用 Java/PHP 等等做后端,C/C++/Go ...

红薯
46分钟前
50
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部