zoukankan      html  css  js  c++  java
  • Java并发编程之volatile关键字解析

    Volatile和Synchronized四个不同点: 1, 粒度不同,前者锁对象和类,后者针对变量

                                                     2, syn线程阻塞,volatile线程不阻塞

                                                     3, syn保证三大特性,volatile不保证原子性

                                                     4, syn编译器优化,volatile不优化

    volatile具备两种特性:

    1. 保证此变量对所有线程的可见性,指一条线程修改了这个变量的值,新值对于其他线程来说是可见的,但并不是多线程安全的。
    2. 禁止指令重排序优化。 Volatile如何保证内存可见性: 1.当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。 2.当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。

    同步:就是一个任务的完成需要依赖另外一个任务,只有等待被依赖的任务完成后,依赖任务才能完成。 异步:不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,只要自己任务完成了就算完成了,被依赖的任务是否完成会通知回来。(异步的特点就是通知)。 打电话和发短信来比喻同步和异步操作。 阻塞:CPU停下来等一个慢的操作完成以后,才会接着完成其他的工作。 非阻塞:非阻塞就是在这个慢的执行时,CPU去做其他工作,等这个慢的完成后,CPU才会接着完成后续的操作。 非阻塞会造成线程切换增加,增加CPU的使用时间能不能补偿系统的切换成本需要考虑。

    友情链接:Java并发编程之volatile关键字解析

  • 相关阅读:
    Codeforces1335F Robots on a Grid
    BJOI2014 大融合
    洛谷 P1463 [SDOI2005]反素数ant && codevs2912反素数
    codeforce 570 problem E&& 51Nod-1503-猪和回文
    洛谷noip 模拟赛 day1 T1
    noip 2010 三国游戏
    noip 2013 华容道
    汕头市队赛 SRM 07 D 天才麻将少女kpm
    noip2012 普及组
    汕头市队赛 SRM 08 B
  • 原文地址:https://www.cnblogs.com/lxmyhappy/p/6761990.html
Copyright © 2011-2022 走看看