首页 > 编程语言 > 详细

线程之间共享

时间:2019-10-13 17:54:55      阅读:109      评论:0      收藏:0      [点我收藏+]

锁:JVM会在每个对象头上都会有个锁的标志位;

技术分享图片

 

 

一、synchronized内置锁,java自带关键字,也叫内置锁

技术分享图片 

 

二、volatile

1、可见性是保证每次get时候会从主内存刷新一次值到运行内存中,自己运行内存中的值值为无效;set设置值的时候也会同步到主内存中让其他线程可以看到修改;

技术分享图片

 

 因为age = age + 20, jvm要执行的指令不止一条,所以不是原子操作;只能保证可见性,不能保证原子性;所以并不能真正保证同步;

指令是一条一条的执行;

2、a= a+1 不是原子性操作,不是真正线程安全的;

技术分享图片

 

 技术分享图片

 

 可见,并不是严格顺序递增,大体上是增加趋势;

所以最适合的场景是:

技术分享图片

三、ThredLocal线程变量

1、空间换时间换取线程安全性的方式,从每个线程都从主内存拷贝变量副本,这个线程变量就像一个map,key是每个线程标识,value是线程对应的变量;

变量太大不合适;

技术分享图片

 

 

技术分享图片

TreadLocal原理是一个map:

技术分享图片

 2、最适合使用场景是线程池的时候,每个线程保有自己的私有连接,

线程之间共享

原文:https://www.cnblogs.com/wmqiang/p/11666984.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!