美文网首页Java
JUC(一) - volatile

JUC(一) - volatile

作者: 21号新秀_邓肯 | 来源:发表于2020-05-15 14:44 被阅读0次

1.简介

在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。

1.2 内存可见性

  • 内存可见性(Memory Visibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。
  • 可见性错误是指当读操作与写操作在不同的线程中执行时,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。
  • 我们可以通过同步来保证对象被安全地发布。除此之外我们也可以使用一种更加轻量级的 volatile 变量。

1.3 volatile 关键字

Java 提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。可以将 volatile 看做一个轻量级的锁,但是又与锁有些不同:

  • 对于多线程,不是一种互斥关系
  • 不能保证变量状态的“原子性操作”
class ThreadDemo implements Runnable {

    private volatile boolean flag = false;

    @Override
    public void run() {
        
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
        }

        flag = true;
        
        System.out.println("flag=" + isFlag());

    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

}

测试

    public static void main(String[] args) {
        ThreadDemo td = new ThreadDemo();
        new Thread(td).start();
        
        while(true){
            if(td.isFlag()){
                System.out.println("------------------");
                break;
            }
        }
    }

相关文章

  • JUC(一) - volatile

    1.简介 在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增...

  • 结合ReetrantLock理解AQS

    AQS简介 Java中Juc包如图所示,基于volatile和CAS搭建起Juc包,其中AQS是其中很重要的抽象框...

  • JUC-volatile

      volatile:Java虚拟机提供的轻量级的同步机制(synchronized) 保证可见性(一个线程修改了...

  • 2019 Java 底层面试题上半场(第一篇)

    JUC多线程及高并发 请谈谈你对volatile的理解 volatile是Java虚拟机提供的轻量级的同步机制 ...

  • JUC(二)锁

    一、引言 1、volatile能不能保证线程安全? 由JUC(一)JMM内存模型[https://www.jian...

  • JUC之volatile详解

    volatile volatile是Java虚拟机提供的轻量级的同步机制,保证可见性,不保证原子性,禁止指令重排(...

  • JUC

    1. Java JUC 简介 2. volatile 关键字-内存可见性 3. 原子变量-CAS算法 4. Con...

  • 详解volatile关键字和原子引用

    本篇看一下Volatile关键字和原子引用。 上图就是JUC包结构,总共分成三块 (1)java.util.con...

  • 11. 并发终结之CAS

    我们都知道用Volatile修饰只能保证内存可见性, 并不保证原子性,JUC提供Atomic类,内部其实也是用Vo...

  • JUC线程高级教程

    JUC 原创者:文思,感谢尚硅谷,资料来源于尚硅谷 目录: 1、volatile关键字与内存可见性 2、原子变量与...

网友评论

    本文标题:JUC(一) - volatile

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