Java线程:volatile关键字
Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。
之所以要单独提出volatile这个不常用的关键字原因是这个关键字在高性能的多线程程序中也有很重要的用途,只是这个关键字用不好会出很多问题。
首先考虑一个问题,为什么变量需要volatile来修饰呢?
要搞清楚这个问题,首先应该明白计算机内部都做什么了。比如做了一个i++操作,计算机内部做了三次处理:读取-修改-写入。
同样,对于一个long型数据,做了个赋值操作,在32系统下需要经过两步才能完成,先修改低32位,然后修改高32位。
假想一下,当将以上的操作放到一个多线程环境下操作时候,有可能出现的问题,是这些步骤执行了一部分,而另外一个线程就已经引用了变量值,这样就导致了读取脏数据的问题。
通过这个设想,就不难理解volatile关键字了。
volatile可以用在任何变量前面,但不能用于final变量前面,因为final型的变量是禁止修改的。也不存在线程安全的问题。
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/222076
分享到:
相关推荐
### Java并发编程:volatile关键字解析 #### 一、内存模型的相关概念 在深入了解`volatile`关键字之前,我们首先需要理解计算机内存模型的一些基本概念。在现代计算机系统中,CPU为了提高执行效率,会将频繁访问的...
Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-...
3. 有序性:volatile关键字可以保证线程之间操作的有序性,因为其本身包含“禁止指令重排序”的语义。 三、 volatile 和synchronized关键字的比较 1. volatile和synchronized都是Java中的同步机制,用于保证线程...
Java线程:volatile关键字 Java线程:新特征-线程池 一、固定大小的线程池 二、单任务线程池 三、可变尺寸的线程池 四、延迟连接池 五、单任务延迟连接池 六、自定义线程池 Java线程:新特征-有返回值的线程...
在Java并发编程中,volatile关键字是一种轻量级的同步机制,它用于确保变量的可见性和有序性。本文将详细探讨volatile关键字的工作原理、使用场景以及如何在实际开发中正确使用volatile。 volatile关键字是Java并发...
Java多线程volatile关键字详解 Java多线程volatile关键字详解主要介绍了Java多线程volatile关键字的应用和原理。volatile是一种轻量同步机制,可以确保变量的可见性和顺序性,但不保证原子性。 volatile关键字的...
Java基础:volatile详解 Java基础:volatile详解问:谈谈你对volatile的理解? volatile是Java虚拟机提供的轻量级的同步机制,它有三个特性:保证可见性、不保证原子性、禁止指令重排。 1、volatile保证可见性 ...
Java并发编程中的volatile关键字是一个非常重要的工具,用于处理多线程环境下的共享变量同步问题。在Java 5之前,volatile的使用常常导致不可预测的行为,但在Java 5之后,随着Java内存模型(JMM,Java Memory Model...
Java中的`volatile`关键字是多线程编程中的一个重要概念,它的主要作用是确保共享变量的可见性和禁止指令重排序。本文将深入探讨`volatile`的关键特性、工作原理以及使用注意事项。 1. 可见性: `volatile`关键字...
知识点7:volatile关键字的使用场景 volatile关键字可以在以下场景中使用: 1. 轻量级的“读-写锁”策略 2. 单例模式(双检查锁机制) 知识点8:volatile关键字的注意事项 volatile关键字不能保证原子性,例如i+...
#### 十一、Java线程:volatile关键字 `volatile`关键字用于标记可能被不同线程访问的变量,确保这些变量的可见性和有序性。 #### 十二、Java线程:新特征-线程池 线程池是一种管理线程的有效机制,它可以重用...
#### Java线程:volatile关键字与新特征 `volatile`关键字用于保证变量的可见性和禁止指令重排序,适用于不需要复杂同步机制的情况下的简单变量读写操作。Java新特性中引入了线程池、`Future`和`Callable`接口支持...
2. 使用volatile关键字在多线程环境下:volatile关键字可以用于多线程环境下,保证线程之间操作的可见性和有序性。 四、示例代码 以下是一个示例代码,演示了volatile关键字的使用: ```java public class ...
4. **Java内存模型**:`volatile`关键字是Java内存模型的一部分,它强制从主内存中读取`volatile`变量,而不是从每个线程的工作内存中。同样,当写入`volatile`变量时,会立即写回主内存,保证了多线程环境下的数据...
* happens-before保证:volatile关键字提供了happens-before保证,确保一个线程的修改能对其他线程是可见的。 * 和CAS结合:volatile关键字可以和CAS结合,保证了原子性。 CAS和synchronized的区别: * CAS是基于...
#### 十、Java线程:volatile关键字 - **volatile关键字** 用于标记可能被多个线程访问的变量,确保其可见性和禁止指令重排。这对于解决某些类型的线程安全问题非常有用。 #### 十一、Java线程:新特征 - **...
1. 一写多读场景:Volatile关键字常用于一写多读的场景,即一个线程写入变量,而多个线程读取变量。在这种场景下,Volatile关键字可以保证变量的可见性。 2. 实时系统:Volatile关键字也常用于实时系统中,例如在...