zoukankan      html  css  js  c++  java
  • Volatile关键字

    Volatile 关键字的作用是变量在多个线程之间可见。

    该程序,主线程中已经将传入参数改为了"false",可是程序并不会终止执行。

    原因:线程之间是不可见的,线程读取的共享变量是主内存的副本(线程本地内存),没有及时读取到主内存的最新结果。

    解决办法:使用Volatile 关键字解决线程之间的可见性,强制线程每次读取该值的时候都去主内存中取值。

    注:Volatile是非原子性的,不能保证线程安全,如:

    该程序本意是启动十个线程,每个线程将静态变量的结果加1000,由于Volatile是非原子性,不能保证线程安全,所以运行结果有误,如:

    解决这个问题,可以使用并发包中 AtomicInteger 来解决,如:

    Volatile与synchronized的区别

    仅靠volatile 不能保证线程的安全性。(原子性)

    1.volatile 轻量级,只能修饰变量,synchronized 重量级,不仅能修饰变量,还可以修饰方法。

    2.volatile 只能保证数据的可见性,不能用来做同步,因为多个线程并发访问volatile 修饰的变量不会阻塞。

       synchronized不仅可以保证可见性,而且还保证原子性。因为,只有获得锁的线程才能进入临界区。

       从而保证临界区中所有的语句全部执行。多个线程争抢synchronized锁对象时,会出现阻塞。 

    线程安全性

    线程安全性包括两个方面,①可见性,②原子性

    从上面自增的例子中可以看出,仅仅使用volatile 并不能保证线程安全性。而synchronized 则可以实现线程安全性。

  • 相关阅读:
    配置wpa_supplicant调试wifi linux下命令行连接wifi
    Android平台开发-WIFI 驱动移植 -- 详细
    明远智睿IMX6Q Android4.4.2移植USBWIFI(RTL8188EUS)
    android上USB Wifi调试记录
    Android wifi驱动的移植 realtek 8188
    CCF-CSP-201703-4-地铁修建
    CCF-CSP-201709-4-通信网络
    CCF-CSP-201409-4-最优配餐
    CCF/CSP-201612-4-压缩编码
    CCF/CSP-201612-3-权限查询
  • 原文地址:https://www.cnblogs.com/zyybb/p/10973658.html
Copyright © 2011-2022 走看看