任何被volatile修饰的变量,都不拷贝副本到工作内存,任何修改都及时写在主存。因此对于Valatile修饰的变量的修改,所有线程马上就能看到,但是volatile不能保证对变量的修改是有序的。什么意思呢?假如有这样的代码:Java代码 public class VolatileTest{ pub... ...
分类:
其他好文 时间:
2018-03-25 18:14:16
阅读次数:
153
static 和final static 静态修饰关键字,可以修饰 变量,程序块,类的方法; 当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存; 3.1.适用范围: 3.1.1.两者范围的交集,所以只能修饰:成员变量、方法、内部 ...
分类:
编程语言 时间:
2018-03-23 15:23:00
阅读次数:
235
一、基础篇JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 oop-klass、对象头 ...
分类:
编程语言 时间:
2018-03-23 10:30:01
阅读次数:
222
在jdk1.8中主要做了2方面的改进 改进一:取消segments字段,直接采用transient volatile HashEntry<K,V>[] table保存数据,采用table数组元素作为锁,从而实现了对每一行数据进行加锁,进一步减少并发冲突的概率。 改进二:将原先table数组+单向链表 ...
分类:
其他好文 时间:
2018-03-22 22:37:26
阅读次数:
164
volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心,这需要明白volatile关键字的特性及实现的原理,这也是本篇文章的主要内容。 一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样 ...
分类:
其他好文 时间:
2018-03-21 20:00:04
阅读次数:
156
简单点说:synchronized很强大,既可以保证原子性,也可以保证可见性,而volatile不能保证原子性; 可见性:一个线程对共享变量值的修改,能够及时的被其它线程看到。 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。 volatile本质是在告 ...
分类:
其他好文 时间:
2018-03-20 11:47:31
阅读次数:
158
sychronized,volatile原理 IO流 装饰者设计模式 IO流基本知识点 IO中那些事线程安全的, 设计模式 算法题 数据结构 网络 linux 数据库索引 待更新 ...
分类:
其他好文 时间:
2018-03-19 23:33:45
阅读次数:
162
多线程编程中开优化选项时要谨慎否则容易掉坑里先看下面的代码,开起两个线程,第二个线程把第一个线程的循环条件置成false按逻辑来说这个应该能顺利结束的不过如果用g++-O3-omultiThreadmultiThread.cpp-lpthread编译的话TestThread1是退不出来的,只有g_brun加上volatile关键字才能正常退出因为在-O3优化选项下执行TestThread1时g_b
分类:
编程语言 时间:
2018-03-19 18:13:49
阅读次数:
187
一、基础篇JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 oop-klass、对象头 ...
分类:
编程语言 时间:
2018-03-19 10:21:31
阅读次数:
280
Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。 Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 ...
分类:
编程语言 时间:
2018-03-16 20:46:43
阅读次数:
223