java 多线程中的 ThreadLocal 类与 volatile 修饰符

news/2024/7/6 4:50:39

ThreadLocal(线程局部变量)

为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。

volatile 修饰符

多线程中,防止主存中的数据与各个线程工作内存中的数据不一致,用来保证数据的一致性。

从内存角度解释会更好解释,每个线程都由 CPU 去执行,都有自己的缓存,程序在执行时都会先从主存中载入输入,操作完成后再写入主存,这个时候如果多线程操作的话多个线程之间有时间差,如果前面的操作的还没有同步回主存,别的线程又已经载入在自己的缓存中,那就会出现缓存不一致的情况。

计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。i = i + 1;当线程执行这个语句时,会先从主存当中读取i的值,然后复制一份到高速缓存当中,然后CPU执行指令对i进行加1操作,然后将数据写入高速缓存,最后将高速缓存中i最新的值刷新到主存当中。


http://www.niftyadmin.cn/n/4071054.html

相关文章

Win32汇编开发环境介绍和RadAsm简明教程第二版

自从第一版发布以来,陆续收到不少网友的来信,很多朋友说教程不错,很适合入门Win32汇编的开发环境,当初我写这个教程的目的也正是如此,所以自我感觉还不错。但随着来信的增多,问题也陆陆续续地来了&#xff…

SQL Server之看懂执行计划

在SQL Server中,选中一段SQL按CtrlL,就可以查看它的执行计划。 上面是一个执行计划的实例,在SQL Server中,执行计划是从右往左看的。 SQL Server中,查找数据的方式有以下几种: 1,表扫描&#xf…

猜数字游戏的bug讨论,如何发现并修正bug。

猜数字游戏的bug讨论,如何发现并修正bug。作者:jhkdiy之前大家都看过了《C++编写猜数字游戏》的文章了,整个源代码比较简单,有C++基础就可以看明白程序的流程,但我的目的…

精读《webpack4.0 升级指南》

本周精读的是 webpack4.0 一些变化,以及 typescript 该怎么做才能最大化利用 webpack4.0 的所有特性。 1 引言 前段时间尝试了 parcel 作为构建工具,就像农村人享受了都市的生活,就再也回不去了一样,发现无配置真是前端构建工具的…

DefToEqu源代码下载

http://jhkdiy.go3.icpcn.com/code/download/define2equ.rar 使用Win32Asm编程的过程中,经常要用到常数定义,如果是有资源的程序更是如此。自己当初编程时是先将要转换的C语言常数ID复制到程序的常数区.const中,然后再用查找替换功能去掉#def…

100条道理,看完后请留下你的感言

1、人之所以痛苦,在于追求错误的东西。  2、与其说是别人让你痛苦,不如说自己的修养不够。   3、如果你不给自己烦恼,别人也永远不可能给你烦恼。因为你自己的内心,你放不下。 4、好好的管教你自己,不要管别…

哪有一天不等你啊!

自从填写2008调查表后我就天天上csdn,看看这周我有没有中将o(∩_∩)o...哈哈,想不到。。。 就在我最需要你的时候,你却悄然离去,人世间最痛苦的事莫过于此,此时此刻,如果上天能 再给我一次机会&#xff0…

印孚瑟斯加入人工智能淘金热 广觅硅谷高手

据印度《 印度时报》5月10日报道,印度第二大软件出口公司印孚瑟斯将未来瞄准人工智能领域。目前,该公司正在紧锣密鼓推进人工智能平台MANA的建设,任命重要领导者促进相关产品的发展,同时也在苦寻美国硅谷高级编码员。智搜&#xf…