线程的工作内存与主内存同步时机

在多线程环境下,线程通过工作内存访问主内存中的共享变量,提高效率。线程变量的加载过程涉及从主内存复制到工作内存,处理后回写到主内存。线程间变量的可见性问题通常需要volatile关键字解决。工作内存变量失效并重新加载主内存变量的情况包括:释放锁、线程切换、CPU空闲时。可以通过调用同步方法、线程休眠或IO操作促使工作内存重新加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java工作内存和主内存模型

在多线程中,多个线程访问主存中的临界资源(共享变量)时,需要首先从主存中拷贝一份共享变量的值到自己的工作内存中,然后在线程中每次访问该变量时都是访问的线程工作内存(高速缓存)中的共享的变量副本,而不是每次都去主存中读取共享变量的值(因为CPU的读写速率和主存读写速率相差很大,如果CPU每次都访问主存的话那么效率会非常低)。

java线程变量加载的大致流程是,将主内存的变量加载到工作内存进行处理,处理完毕后写会主内存
在这里插入图片描述

工作内存和主内存数据交换时机

先看一下如下代码,主线程运行是开启另一个线程,设置flag为true;但是发现主线程并没有结束;这个是大家在学习线程间可见性时,经常会遇到的例子,通常的解决办法是给flag,加上volatile 关键字,保证变量的可见性 ;对于线程安全问题,很多时候都不是必现的,但有一个奇怪的现象是,下面的程序每次运行都是必现,这又什么原因导致的呢?

```public class Test {
   
    public static void main(String[] args) {
   
        ThreadDemo td = new ThreadDemo();
        new Thread(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值