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

  • 相关阅读:
    数据库必知知识
    Shiro+easyUI+SpringMVC实现登录认证
    Java设计模式总结
    MyBatis之分页插件(PageHelper)工作原理
    Redis应用之[限制访问频率]
    Oracle最新的Sql笔试题及答案
    Shiro源码分析之SecurityManager对象获取
    Spring之BeanFactory和FactoryBean接口的区别
    Spring中使用的设计模式
    Spring之事件监听(观察者模型)
  • 原文地址:https://www.cnblogs.com/lxmyhappy/p/6761990.html
Copyright © 2020-2023  润新知