java volatile 关键字

4 篇文章 0 订阅

定义:

volatile关键是声明的变量表示有其他线程可能会更改该变量的值,所以各线程对于volatile定义的变量必须从主存中获取,而不能通过缓存中获取,但是volatile字段是非阻塞的,即无锁的,也就是说,它只保证每次从主存中获取数据,但是不能让read- update-write过程是成为一个原子操作,这也是它和Synchronized关键字的一个重要区别。

实例:

public class StoppableTask extends Thread {
  private volatile boolean pleaseStop;

  public void run() {
    while (!pleaseStop) {
      // do some stuff...
    }
  }

  public void tellMeToStop() {
    pleaseStop = true;
  }
}

如果不加volatile关键字,一开始run()进程便从cache中读到pleaseStop的值为false,是合法的,(虽然tellStop()进程可能已经改变了pleaseStop的值为true),但run()进程不会再读pleaseStop的值。

与Synchronized关键字区别:

来源于参考链接

参考:

https://www.javamex.com/tutorials/synchronization_volatile.shtml

https://www.javamex.com/tutorials/synchronization_volatile_typical_use.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值