为什么局部变量不允许使用 volatile 关键字?

2023-12-19

考虑一下片段:

如果在主线程中,我将其放在method-

volatile CountDownLatch latch = new CountDownLatch(3);

new Thread(new ProcessThread("Worker1",latch, 20000)).start();//20 secs
new Thread(new ProcessThread("Worker2",latch, 60000)).start();//60 secs
new Thread(new ProcessThread("Worker3",latch, 40000)).start();//40 secs

我看到volatile显示为非法修饰符。并且只有final是允许的。并且final保证初始化安全.

public static class ProcessThread implements Runnable {
  final CountDownLatch latch;
  final long workDuration;
  final String name;

  public ProcessThread(String name, CountDownLatch latch, long duration){
      this.name= name;
      this.latch = latch;
      this.workDuration = duration;
  }
}

下面的对象即new CountDownLatch(3)构造正确,但我也想确保参考latch上面的对象所分配到的对象保证对其下面的代码可见。

final CountDownLatch latch = new CountDownLatch(3);

上面的代码是否保证初始化,以便latch对于下面的代码完全可见,即

new Thread(new ProcessThread("Worker1",latch, 20000)).start();

局部变量存在于栈中;当然,当你调用same方法两次,他们有all它们的局部变量位于各自的堆栈上。

volatile只有当multiple线程将写入same内存位置(在堆上)。

这对于方法体内的局部变量来说绝对没有意义!

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

为什么局部变量不允许使用 volatile 关键字? 的相关文章

随机推荐

  • 如果validation_data ValueError:具有多个元素的数组的真值不明确,则在 model.fit() 中引发错误。使用 a.any() 或 a.all()

    我正在尝试运行一个简单的自动编码器模型 我正在从包含词嵌入的 csv 中读取训练数据 我有这段代码 但标题中的错误是在model fit 功能并与我的连接validation data 我尝试了很多方法 但错误仍然存 在 我是 NLP 的新
  • Rake“已初始化常量 WFKV_”警告

    尝试跑步rake cucumber ok并收到此错误 Users dev rbenv versions 1 9 2 p290 lib ruby gems 1 9 1 gems rack 1 3 4 lib rack backports ur
  • 将 :host-context() 与相邻同级选择器一起使用

    我正在尝试使用 host context 和相邻的同级选择器来设置元素的样式 如下所示
  • 严格的别名规则是什么?

    当询问有关C 中常见的未定义行为 https stackoverflow com questions 98340 what are the common undefinedunspecified behavior for c that yo
  • Java8 从类中检索 lambda setter

    我试图为私有字段的 setter 获取 lambda 方法句柄 但由于某种原因 无法找到该 setter 这是我正在使用的功能接口 FunctionalInterface public interface ISetter
  • 强制执行有界 Nat?

    我怎样才能强制执行Nat that s lt N Example def lessThan5 x NatLT5 where lessThan5 Nat 4 会编译 但是lessThan5 Nat 6 不会 您可以使用类型类LTEq http
  • 错误:(gcloud.app.deploy)INVALID_ARGUMENT:无法解析源

    我正在尝试部署一个go 1 11运行时曾经有效 但最近我得到了 ERROR gcloud app deploy INVALID ARGUMENT unable to resolve source错误 我的里面什么也没有app yaml已更改
  • python中强度函数的积分

    有一个函数可以确定圆形孔径的夫琅和费衍射图案的强度 更多信息 http en wikipedia org wiki Airy Disk 距离 x 3 8317 3 8317 中函数的积分必须约为 83 8 如果假设 I0 为 100 当您将
  • 如何向作为组存储在 HDF5 文件中的 pandas 数据帧添加属性?

    我创建了一个多维 pandas 数据框 如下所示 import numpy as np import pandas as pd iterables bar baz foo qux one two mindex pd MultiIndex f
  • 值得使用 sqlalchemy-migrate 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个使用 sqlalchemy 的 Web 应用程序 在 Pylons 内 我需要有效地更改架构 以便能够至少每天 甚至更多 更改生产版本
  • UDP打洞帮助

    我正在尝试使用点对点将互联网网络添加到我的游戏中 我已经实现了仅 LAN 版本 它使用 NET 的对等类在本地网络内进行连接 我意识到我需要使用 UDP 打洞来建立与防火墙后面的其他客户端的连接 这就是我开始实施它的方式 该服务器是一个 H
  • R 调用的 C 代码不断崩溃

    下面是我编写的 C 代码的一部分 功能foo是在 R 中调用 代码不断导致 R 崩溃 我将问题范围缩小到这个outer 函数 用于计算外部和或差 注意被注释掉的部分 如果我不注释掉 该函数将导致R崩溃如果每个数组包含超过 1000 个数据点
  • 创建允许字符串参数(字符串索引)的类索引器operator[]

    我想用 C 创建一个类 该类必须使用集合进行管理 好的 没问题 我当然想使用operator 但是 在这种情况下 我的愿望是不按位置索引 而是按名称 gt 这意味着使用字符串索引器 看来这种东西对我的编译器来说不太好 In hpp clas
  • 如何在 ChartJS 中使折线图覆盖在条形图上

    我正在使用 leighquince 叉子chartjs https github com leighquince Chart js在 v1 01 beta 5 中 因为我可以叠加两个图表 当我尝试叠加折线图和条形图时 折线图位于条形图下方
  • 使用 LINQ Contains 与 SqlMethods.Like

    如何在 LINQ 查询中复制以下结果而不调用帮助器库 System data Linq SqlClient Where SqlMethods Like e POSITION A FGL 7 如果可能的话 我希望这个查询更加纯粹的 LINQ
  • 在禁用的控件上显示工具提示

    我试图在鼠标悬停在禁用的控件上时显示工具提示 由于禁用的控件不处理任何事件 因此我必须在父窗体中执行此操作 我选择通过处理来做到这一点MouseMove父窗体中的事件 这是完成这项工作的代码 void Form1 MouseMove obj
  • Java 修改 foreach 中的元素

    我正在自学Java 因此下面的代码除了学习 测试之外没有其他功能 本质上 我试图在 foreach 循环中修改整数数组的元素 即 将它们减半 我应该注意的是 我并没有重新排序 添加或删除元素 而是将元素重新排序 只是改变他们的价值观 这是我
  • 替换属性以提高性能

    情况 如同这个问题 https stackoverflow com questions 4963036 python how to replace a property with a regular attribute 我想更换一个属性 与
  • IOS 13 CNContacts 不再检索所有联系人

    我有一个应用程序可以与 CNContacts 框架完美配合 一直到 IOS 12 我目前正在使用 IOS 13 beta 对其进行测试 但它完全损坏了 我已检查联系人权限并删除该应用程序并重新允许权限 这是我用来检索所有联系人的代码 NSE
  • 为什么局部变量不允许使用 volatile 关键字?

    考虑一下片段 如果在主线程中 我将其放在method volatile CountDownLatch latch new CountDownLatch 3 new Thread new ProcessThread Worker1 latch