zoukankan      html  css  js  c++  java
  • Volatile关键字实现原理

    Volatile关键字的作用?

      让其他线程能够马上感知到某一线程对某个变量的修改。

      1)保证可见性,对共享变量的修改,其他线程马上能感知到,但不能保证原子性。

      2)保证有序性,在JVM的编译阶段和指令优化排序阶段,对于volatile修饰的变量,其代码顺序不会改变。

    Volatile和Synchronized的区别?

      (1)使用上的区别

        Volatile只能修饰变量,synchronized只能修饰方法和语句块

      (2)对原子性的保证

        synchronized可以保证原子性,Volatile不能保证原子性

      (3)对可见性的保证

        都可以保证可见性,但实现原理不同

        Volatile对变量加了lock,synchronized使用monitorEnter和monitorexit  monitor  JVM

      (4)对有序性的保证

        Volatile能保证有序,synchronized可以保证有序性,但是代价(重量级)并发退化到串行

      (5)其他

        synchronized引起阻塞

        Volatile不会引起阻塞

    volatile的使用:

     1 public class VolitaleDemo01 {
     2 
     3     final static int MAX = 5;
     4     //static int init_value = 0;如果不加volatile,不能保证更新完后读数据
     5     static volatile int init_value = 0;
     6     
     7     public static void main(String[] args) {
     8         new Thread(()->{
     9             int localValue = init_value;
    10             while(localValue<MAX){
    11                 if(localValue!=init_value){
    12                     System.out.println("Reader:"+init_value);
    13                     localValue = init_value;
    14                 }
    15             }
    16         },"Reader").start();
    17         new Thread(()->{
    18             int localValue = init_value;
    19             while(localValue<MAX){
    20                 System.out.println("Updater:"+(++localValue));
    21                 init_value = localValue;
    22                 try {
    23                     TimeUnit.SECONDS.sleep(2);
    24                 } catch (InterruptedException e) {
    25                     // TODO Auto-generated catch block
    26                     e.printStackTrace();
    27                 }
    28             }
    29         },"Updater").start();
    30     }
    31 
    32 }
  • 相关阅读:
    LInux下几种定时器的比较和使用
    R中字符串操作
    GIS基本概念
    特征选择实践
    xcrun: error: invalid active developer path (/Applications/Xcode.app/Contents/Developer)解决办法
    mac os idea的快捷键
    python代码打包发布
    机器学习之聚类
    机器学习之决策树
    机器学习之逻辑回归
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/12369854.html
Copyright © 2011-2022 走看看