java多线程内存同步问题

2023-11-04

1. volatile保证内存可见

  1. volatile保证java多线程内存(不是内存一致性,内存一致性是由内存一致性协议保证的,这里说的内存可见性是指JMM可见性.)可见是最为正规和常用的方式,下面是一个简单的实现demo:
public class Demo01 {
   
    private static volatile boolean flag = true;
    public static void main(String[] args) throws Exception {
   
       new Thread(new Runnable() {
   
            @Override
            public void run()  {
   
                while (flag){
                 
                }
                System.out.println("end...");
               }
        }).start();
      Thread.sleep(2000);
      flag = false;   
    }
}

上述代码中,如果把关键字volatile去掉,那么程序就会陷入死循环,无法结束。主要是因为,没有volatile关键字,子线程的内存里面的flag是线程刚开始执行时候读取的值,是true。即便后面主线程休眠结束之后,修改了flag为false,但子线程依旧是无法感知的。有了volatile关键字,变量每次变化都会通知各个线程做同步。

2. sleep同步内存数据

public class Demo02 {
   
    <
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java多线程内存同步问题 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如果使用的 JVM 是 x86 或 x64,则以不同的方式解决 Maven 依赖关系?

    我设置了一个 Maven 存储库来托管一些 dll 但我需要我的 Maven 项目根据使用的 JVM 是 x86 还是 x64 下载不同的 dll 例如 在运行 x86 版本 JVM 的计算机上 我需要从存储库下载 ABC dll 作为依赖
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java:正则表达式排除空值

    在问题中here https stackoverflow com questions 51359056 java regexp for a separated group of digits 我得到了正则表达式来匹配 1 到 99 之间的一
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Java 收集返回顶级项目的映射的嵌套流

    我有以下模型 class Item String name List
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht

随机推荐

  • Vue 并排放置两个div的写法

    Vue的开发文档 Layout布局模块 https element eleme cn zh CN component select 样例 使用
  • 华为OD机试 - 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt
  • MySQL高级学习笔记

    目录 1 MySQL数据库逻辑架构 1 网络连接层 2 服务层 MySQL Server 1 连接池 Connection Pool 2 系统管理和控制工具 Management Services Utilities 3 SQL接口 SQL
  • 信息系统、课设、毕设

    信息系统 课设 毕设 可使用技术 后端 PHP Node js等 前端 jQuery vue等 UI layui elementui等 数据库 SQLserver MySQL等 APP uniapp等 适合 进销存ERP系统 商城 网站 A
  • mac卸载idea

    idea只有30天的试用期 比较穷 买不起正版 又不想用破解 是因为发现破解的版本写代码的时候反应好迟钝 一个报红的问题修复后半天还不好 到期了只能完全卸载重新装一遍 这样也还有个好处 能用最新版 一直在追求最新版的路上 给像我一样的强迫症
  • C语言:格式化输入输出函数

    C语言 格式化输入输出函数 1 格式化输出函数 printf 2 格式化输入函数 scanf C语言提供的格式化输入输出函数的原型在头文件stdio h中声明 在使用时应在程序头部包含该文件 include
  • 安卓Unity3D Camera图像和音频采集推送代码

    安卓Unity3d 可以使用ReadPixels从当前Render Target读取图像 音频可以从AudioClip读取 具体调用GetData接口 读取到的可能是float类型 有些音频编码器可能需要sint16格式 这需要做一个转换
  • 数据处理方法:归一化与标准化处理

    在数据挖掘中 在建模前需要对数据进行预处理 预处理方法包括归一化与标准化 对数据进行缩放 1 归一化 Normalization 将数据缩放到0 1之间 线性 常用 归一化 最大最小值归一化 y x
  • mysql jdbc配置重连_Spring Boot 配置MySQL数据库重连的操作方法

    使用jdbc连接MySQL 如果连接失效 可能会报类似的错误 com mysql jdbc exceptions jdbc4 CommunicationsException The last packet successfully rece
  • 预训练模型--GPT

    why预训练 finetune 目前在nlp领域 比较流行的一种方式就是 pretrain finetune 为什么是这种模式呢 在nlp领域大量数据是无标签的 只有小量数据是有标签的 而大量数据可以帮助模型获得更好的效果 泛化能力 所以在
  • Android大文件上传秒传之实战篇

    源码传送门 在上一篇文章我们介绍了获取大文件的一个唯一的特征值MD5 通过MD5我们可以唯一的标识一个文件 并可以实现秒传效果 今天的这篇文章主要介绍大文件的上传操作 当然谈到上传文件 网络是必不可少的 现在也有很多较为流行的网络框架 如v
  • Jsp邮件找回密码全攻略

    author Joy zhuang 一般大型网站我们登录的时候 密码忘了都有个功能可以找回密码 细数下大致的方法 1 直接把密码发送到你的邮箱去 一般是临时密码 2 短信验证 成本较高 3 密保问题 4 发送一个链接到你邮箱点击即可更改密码
  • 【C++入门】C++的异常管理机制介绍

    1 什么是异常 1 异常可以理解成可能导致程序不能正常运行的情况 或者说不希望发生的情况 2 异常的发生是可不预知的 我们不知道何时会发生何种异常 要是我们提前知道就处理了 3 所以我们在写程序时 就需要考虑将来程序运行时可能遇到的异常情况
  • pysot-新手跑代码遇到的问题及解决方法

    1 不管干什么首先得把文件夹加入到python的搜索路径 不然会import失败的 set PYTHONPATH PYTHONPATH D 3 Object tracking pysot master windos下 export PYTH
  • 【测试开发篇】测试用例及方法

    文章目录 测试用例的基本要素 案例 设计测试用例的具体设计方法 基于需求进行测试用例的设计 等价类 边界值 判定表 因果图 场景设计法 错误猜测法 正交排列 测试用例的基本要素 测试用例 Test Case 是为了实施测试而向被测试的系统提
  • Sqli-labs less 29

    Less 29 首先先看下tomcat中的index jsp文件 在apache的index php中 sql语句为 sql SELECT FROM users WHERE id id LIMIT 0 1 因此我们根据HPP的原理 我们直接
  • 算法第一章作业

    1 请上网了解编码规范 说明你本学期的编码遵循哪个规范及该规范的链接 本学期我会遵循Google的编码规范 参考链接 https blog csdn net freeking101 article details 78930381 2 请阅
  • 大数据学习 第一篇——基础知识

    前言 在学习大数据之前 先要了解他解决了什么问题 能给我们带来什么价值 一方面 以前IT行业发展没有那么快 系统的应用也不完善 数据库足够支撑业务系统 但是随着行业的发展 系统运行的时间越来越长 搜集到的数据也越来越多 传统的数据库已经不能
  • ftp 530 login incorrect

    今天在新建虚拟账号过程中遇到的一点小问题 记录一下 新建的流程如下 vim etc vsftpd virtusers 在最底下加入账号名 ftpuser 和密码 db load T t hash f etc vsftpd virtusers
  • java多线程内存同步问题

    多线程内存可见性 1 volatile保证内存可见 2 sleep同步内存数据 3 System out print 方法同步线程数据 4 异常打印也会同步线程数据 1 volatile保证内存可见 volatile保证java多线程内存