Java并发编程——volatile关键字
volatile是Java并发编程中重要的一个关键字,被比喻为“轻量级的synchronized”,与synchronized不同的是,volatile只能修饰变量,无法修饰方法及代码块等。假设有两个线程A和B,线程A执行到new Singleton(),开始初始化实例对象,由于存在指令重排序,这次new操作,先把引用赋值了,还没有执行构造函数。首先,步骤2、3是保证单例。指令重排序是JVM为了优化指令、提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度。指令重排序包括编译器重排序和运行时重排序。volatile关键字提供内存屏障的方式来防止指令被重排,编译器在生成字节码文件时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。
用户评论