Java笔试:Java volatitle关键字,
分享于 点击 12067 次 点评:34
Java笔试:Java volatitle关键字,
知识点:
1.可见性:是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。
2.原子性:是指这个操作是不可分割的。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。一个操作是原子操作,那么我们称它具有原子性。
3.当一个变量定义为volatile之后,将具备两种特性:
(1)保证此变量对所有的线程的可见性:这里的“可见性”指当一个线程修改了这个变量的值,新值对于其他线程是立即得知的。但普通变量做不到这点,普通变量的值在线程间传递均需要通过主内存来完成。
(2)禁止指令重排序优化:有volatile修饰的变量,赋值后多执行了一个“load addl $0x0, (%esp)”操作,这个操作相当于一个内存屏障(指令重排序时不能把后面的指令重排序到内存屏障之前的位置),只有一个CPU访问内存时,并不需要内存屏障;(什么是指令重排序:是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理)。
4.在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。
5.声明变量是volatile的,JVM保证了每次读变量都从内存中读,跳过CPU cache这一步。
相关文章
- 暂无相关文章
用户点评