volatile作用及相关集合类】的更多相关文章

在工作一年多之后,java程序员都会了解到volatile 这个修饰符, 其在多线程环境下解决了long/double写操作的原子性.基本变量的可见性.通过建立内存屏障保证指令有序性 那么在哪些Java类中使用到了volatile? 首先考虑哪些类要去保证线程安全,其实有很多类的,只要这个类包含私有属性,且没有final修饰. 可以考虑到的有线程. 集合.IO.字符串相关.包装类.网络编程等 Thread.threadStatus 线程状态 Thread.parkBlocker Thread.b…
.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令. .htaccess主要的作用有:URL重写.自定义错误页面.MIME类型配置以及访问权限控制等.主要体现在伪静态的应用.图片防盗链.自定义404错误页面.阻止/允许特定IP/IP段.目录浏览与主页.禁止访问指定文件类型.文件密码保护等..htaccess的用途范围主要针对当前目录. 一..htaccess的基本作用 启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用Al…
首先.htaccess什么? .htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令. 当我们使用apache部署一个网站代码准备部署到网上的时候,我们手中的apache的httpd.conf大家肯定都知道.这是apache的配置文件,然而我们大多数的网站都是基于云服务器来部署的,还有就是团队协作开发的时候,我们很难直接修改公共的httpd.conf,这时 .htaccess就是httpd.conf的衍生品,它起着和httpd.conf相同的作用. .htaccess的…
[一]端口内容 tomcat的端口号相关信息: Tomcat admin port——管理端口,允许你远程配置tomcat HTTP——正常的http协议 AJP——Apache JServ Protocol,用来传输二进制的 [二]端口作用 Tomcat admin port——用于 HTTP——用于监听浏览器发送的请求. 设置成80 后可以直接使用http://localhost 访问 AJP——用于监听其他服务器转发过来的请求. [三]端口的配置(如果使用多个Tomcat是需要配置的) 每…
先贴一下 volatile 的作用定义 如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的 首先问题就来了,一个共享变量再被volatile修饰过后,怎么被确保所有线程看到的这个变量的值是一致的的呢,也就是说volatile是如何来保证可见性的呢? 在X86处理器下通过工具获取JIT编译器生成的汇编指令来查看对volatile进行写操作时,CPU会做什么事情. private volatile instance = new Singleton(); 转…
volatile使用场景:线程间共享变量需要使用 volatile 关键字标记,确保线程能够读取到更新后的最新变量值. volatile关键字的目的是告诉虚拟机: 1.每次访问变量时,总是获取主内存的最新值. 2.每次修改变量后,立刻会写到主内存. 所以volatile解决的是可见性的问题: 1.当一个线程修改了某个共享变量的值,其他线程能够立刻看到修改之后的值. 流程图 如下:…
1:volatile是什么? Volatile是java虚拟机提供的一种轻量级的同步机制,具有 三大特性,分别是:保证可见性.不保证原子性.禁止指令重排 可见性: 概念:每一个线程都有自己的工作内存,线程不能直接操作主内存的值,必须把主内存的数据拷贝回工作内存进行更改后,刷新回主内存,并及时通知其他线程 import java.util.concurrent.TimeUnit; public class test { public static void main(String[] args)…
参考资料: http://www.google.com/cse?sa.x=0&sa.y=0&cx=010284515138798138769%3Aajbqkpwaapm&ie=UTF-8&q=volatile#gsc.tab=0&gsc.q=volatile&gsc.page=1 1.最完整说明Volatile作用的文章: http://ifeve.com/jmm-faq-volatile/ 2.说明了volatile的使用场景的文档: http://www…
volatile作用总结: 1. 强制线程从公共内存中取得变量的值,而不是从线程的私有的本地内存中,volatile修饰的变量不具有原子性(修改一个变量的值不能同步). 2. 保证volatile修饰的变量在被一个线程修改后,会被强制立即刷新到主存(可见性),其他线程如果有该变量的缓存行,会被设置为无效. 3. 禁止指令重排(有序性). a.happen-before b.编译器在生成字节码时, 会在指令序列中插入内存屏障,会多出一个 lock 前缀指令 内存屏障是一组处理器指令,解决禁止指令重…
接下来看看volatile是如何解决上面两个问题的: 被volatile修饰的变量在编译成字节码文件时会多个lock指令,该指令在执行过程中会生成相应的内存屏障,以此来解决可见性跟重排序的问题. 内存屏障的作用: 1.在有内存屏障的地方,会禁止指令重排序,即屏障下面的代码不能跟屏障上面的代码交换执行顺序. 2.在有内存屏障的地方,线程修改完共享变量以后会马上把该变量从本地内存写回到主内存,并且让其他线程本地内存中该变量副本失效(使用MESI协议) 作者:凌风郎少链接:https://www.ji…