volatile关键字

学习线程池时遇到了很多属性都用volatile修饰,因此去查了它的作用;

        被volatile修饰的变量都有一个特征就是可见性得到保障,原子性得不到保障,是基于内存实现的;

举个例子:线程池的核心线程数corePoolSize是重要的初始化参数之一,当核心线程数发生变更时,线程池需要立刻知道,并触发一些方法。

被volatile修饰的变量corePoolSize读写时会强制使用内存,也就是说A线程对corePoolSize变量执行写操作时,会使其他线程刚从内存中读取的corePoolSize会被强制失效,需要其他线程重新从内存中再次获取;

优点:

保证了因缓存导致的数据不一致性;

确保了程序执行的先后顺序

缺点:

不具备原子性,修饰的变量的操作一般为读,改,写三者连续,当A线程写入时,主内存中的值如果已经改变,也是不会影响写的,例如变量原值为0 ,A读取后改成1 写入1之前,B线程已经改成了1,就会导致最后的结果还是1,而不是0+1+1=2

注意点:

修饰的变量的修改操作与自身无关

该变量没有包含在具有其他变量的不变式中

相关推荐

  1. volatile关键字

    2024-04-08 06:50:03       32 阅读
  2. volatile关键字

    2024-04-08 06:50:03       35 阅读
  3. volatile关键字详解

    2024-04-08 06:50:03       57 阅读
  4. 并发编程--Volatile关键字

    2024-04-08 06:50:03       47 阅读
  5. 介绍下volatile关键字

    2024-04-08 06:50:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 06:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 06:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 06:50:03       82 阅读
  4. Python语言-面向对象

    2024-04-08 06:50:03       91 阅读

热门阅读

  1. 【云开发笔记NO.24】中间件和中台

    2024-04-08 06:50:03       34 阅读
  2. 关于npm和yarn的使用(自己的问题记录)

    2024-04-08 06:50:03       34 阅读
  3. 4.7Qt

    4.7Qt

    2024-04-08 06:50:03      29 阅读
  4. 计算机网络——物理层

    2024-04-08 06:50:03       33 阅读
  5. EasyExcel 校验后导入

    2024-04-08 06:50:03       31 阅读
  6. 统计Excel文件中的答案选项和类别

    2024-04-08 06:50:03       61 阅读
  7. 如何创建虚拟环境打包py文件

    2024-04-08 06:50:03       30 阅读
  8. uni-app + vue3实现input输入框保留2位小数的逻辑

    2024-04-08 06:50:03       33 阅读
  9. uniapp登录拦截白名单使用

    2024-04-08 06:50:03       32 阅读
  10. 跨站脚本攻击XSS

    2024-04-08 06:50:03       31 阅读
  11. C++语言学习(四)—— 字符串处理函数

    2024-04-08 06:50:03       36 阅读
  12. MacOS - unsupported git version(升级 Git)

    2024-04-08 06:50:03       33 阅读
  13. 【数据库】MySQL数据库学习涵盖的多个方面

    2024-04-08 06:50:03       29 阅读