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关键字解析

  • 相关阅读:
    TCP协议与UDP协议的区别
    打印阵列
    Java的动态代理机制详解(转)
    Java内存模型(转载)
    Hibernate工作原理及为什么要用?(转http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html)
    SpringMVC工作原理
    FPGrowth算法原理
    十大排序之快速排序
    python logging
    把字符串转换成整数
  • 原文地址:https://www.cnblogs.com/lxmyhappy/p/6761990.html
Copyright © 2011-2022 走看看