美文网首页
volatile(1)

volatile(1)

作者: 谁家的猪 | 来源:发表于2019-07-14 08:09 被阅读0次

volatile是Java虚拟机提供的轻量级的同步机制

volatile三大特性
  1. 保证可见性
  2. 不保证原子性
  3. 禁止指令重排序

volatile的可见性

可见性Demo

  1. 思路
    在AAA线程中修改MyData的number值,在main线程中观察值是否已经改变。
  2. 代码部分
/**
 * @author lijiayin
 */
public class VolatileDemo {

    public static void main(String[] args) {
        MyData myData = new MyData();
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            myData.to60();
            System.out.println("update");
        }, "AAA").start();
        
        while (myData.number == 0){
            
        }

        System.out.println("finish");
    }
}

class MyData{
    
    int number = 0;
    
    void to60(){
        number = 60;
    }
}
  1. 运行结果
    程序输出“update”后,一直在运行;main线程不知道此时number的值已经修改


    运行结果.png
  2. 将MyData的number加上volatile关键字
package com.interview.concurrency.example.thread;

/**
 * @author lijiayin
 */
public class VolatileDemo {

    public static void main(String[] args) {
        MyData myData = new MyData();
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            myData.to60();
            System.out.println("update");
        }, "AAA").start();
        
        while (myData.number == 0){
            
        }

        System.out.println("finish");
    }
}

class MyData{
    
    volatile int number = 0;
    
    void to60(){
        number = 60;
    }
}
  1. 运行结果
    程序在AAA线程更新number的值后,main线程发现了值的修改,程序结束。


    运行结果.png
  2. 结论
    volatile关键字修饰的属性,被修改并写回主内存时,其他线程都会收到通知,保证了对其他线程的可见性。

相关文章

  • Volatile理解

    Java Volatile1. volatile 理解2. volatile 不保证原子性3. Volatile ...

  • volatile、synchronized、lock详解

    volatile、synchronized、lock详解 1、volatile 被volatile定义的变量被一个...

  • volatile学习

    目录:1.volatile是什么2.volatile的作用3.volatile的原理4.volatile与sync...

  • Java 并发编程(2): Java 中的同步原语

    1 volatile volatile 实现了轻量级的线程间通信机制. 1.1 volatile 的特性 对vol...

  • volatile(1)

    volatile是Java虚拟机提供的轻量级的同步机制 volatile三大特性 保证可见性 不保证原子性 禁止指...

  • 多线程笔记

    1. volatile 1.1 volatile介绍 volatile保证了共享变量的“可见性”。可见性的意思是当...

  • java学习笔记

    1.volatile 2.JMM(java内存模型) 3.volatile代码可见性 4.volatile代码不保...

  • 一、volatile和sychronized

    1 volatile 1.1 volatile的应用 Java语言规范第3版中对volatile的定义如下:Jav...

  • (3)线程的安全原理分析

    1.初识volatile 下面这段代码,演示了一个使用 volatile 以及没使用 volatile这个关键字,...

  • Java并发编程-基础模块

    一. volatile 1. volatile的语义 Java内存模型对volatile关键字定义了一些特殊规则....

网友评论

      本文标题:volatile(1)

      本文链接:https://www.haomeiwen.com/subject/dmgkkctx.html