为什么 Java 同步不能按预期工作?

2023-12-04

我试图弄清楚同步方法是如何工作的。根据我的理解,我创建了两个线程T1 and T2这将调用相同的方法addNew,由于该方法是同步的,难道它不应该先为一个线程执行 for 循环的所有迭代,然后再为另一个线程执行吗?输出不断变化,有时打印正确,有时打印 T1 中的值与 T2 值混合。代码很简单,有人可以指出我做错了什么吗?谢谢。

public class Main {
    public static void main(String[] args) {
        Thread t1 = new Thread(new A());
        Thread t2 = new Thread(new A());
        t1.setName("T1");
        t2.setName("T2");
        t1.start();
        t2.start();
    }
}

public class B {
    public synchronized void addNew(int i){
        Thread t = Thread.currentThread();
        for (int j = 0; j < 5; j++) {
            System.out.println(t.getName() +"-"+(j+i));
        }
    }
}

public class A extends Thread {
    private B b1 = new B();

    @Override
    public void run() {
        b1.addNew(100);
    }
}

Each A实例有自己的B实例。方法addNew是一个实例方法B。因此,在调用期间隐式获取的锁addNew是接收器上的锁B实例。每个线程都在调用addNew在不同的B,因此锁定不同的锁。

如果你想all B实例使用公共锁,创建单个共享锁,并在主体中获取它addNew.

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

为什么 Java 同步不能按预期工作? 的相关文章

  • 使用 Jersey Client 忽略自签名 ssl 证书 [重复]

    这个问题在这里已经有答案了 我正在使用 Jersey 客户端库对 jboss 上运行的其余服务运行测试 我使用自签名证书在服务器上正确设置了 https 在本地主机上运行 但是 每当我使用 https url 运行测试时 都会收到以下错误
  • 为什么 DragHandler exportAsDrag 禁用我的 MouseMotionListener?

    我想实现一个简单的 JComponent 拖放 并带有 O Reilly Swing Hacks 的预览 我的问题是 如果 TransferHandler 启动 Drag MouseMotionListener 停止执行 mouseDrag
  • Spring Rest POST Json RequestBody 不支持内容类型

    当我尝试使用 post 方法发布新对象时 RequestBody 无法识别 contentType Spring 已经配置完毕 POST 可以与其他对象一起使用 但不能与这个特定对象一起使用 org springframework web
  • 如何在 Java 中根据 XSD 1.1 验证 XML?

    在 Java 中根据 XML Schema 1 1 验证 XML 文件的最佳方法是什么 我从中获取了代码tutorial http www ibm com developerworks xml library x javaxmlvalida
  • 如何使用 Gradle 2.10 将 ANTLR 词法分析器语法导入到另一个语法中?

    我一直在和 Terence Parr 一起学习 ANTLR 4权威的 ANTLR 4 参考 到目前为止我一直在使用 Gradle 2 10 及其内置 ANTLR 插件进行跟踪 然而 我在获取一些我从第 4 章第 38 41 页改编的代码以使
  • java“类文件包含错误的类”错误

    我正在尝试制作一个控制台应用程序来测试我的网络服务 我成功部署了一个网络服务http localhost 8080 WS myWS http localhost 8080 WS myWS我用 wsimport 制作了代理类 wsimport
  • 嵌套枚举是静态的吗?

    读书时这个问题 https stackoverflow com questions 25011061 why can enum implementations not access private fields in the enum cl
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • Java中通过FTP创建文件夹层次结构

    Java 是否有现成的功能可以在远程 FTP 服务器上创建文件夹层次结构 Apache Commons 确实提供了 FTP 客户端 但我找不到创建目录层次结构的方法 它确实允许创建单个目录 makeDirectory 但创建整个路径似乎并不
  • 创建一个 int 类型的随机数组。爪哇

    我需要创建一个随机的 int 数组 并按我自己的类对其进行排序 这是我制作数组的地方 public class MyProgram9 public static void main String args int list new int
  • 我可以在主线程上读取一个小 txt 文件,还是应该始终避免那里的 I/O?

    我正在读取一个小的 json 文件 其中有几行 它存储在用户设备的内部应用程序文件夹中 我所做的就是这样 JSONObject jsonObject new JSONObject MyUtils inputStreamToString My
  • 这个finally子句包含close()调用的原因是什么

    我正在学习在线java课程 使用 Java 编程简介 http math hws edu javanotes index html 在 I O 章节中 引入了以下代码 顺便说一下 在本程序的末尾 您将发现我们第一个有用的 try 语句中的
  • 捕获 XSS(跨站脚本)攻击的最佳正则表达式(Java 中)?

    杰夫实际上在净化 HTML http refactormycode com codes 333 sanitize html 但他的示例是用 C 编写的 而我实际上对 Java 版本更感兴趣 有人有更好的 Java 版本吗 他的示例是否足以直
  • 在同一台计算机上设置 JBoss 的多个实例

    我在 JBoss 社区中找到了下一页 http www jboss org community wiki ConfigurePorts http www jboss org community wiki ConfigurePorts 有下一
  • 我们可以用java定制一个垃圾收集器吗?

    我们知道java的垃圾收集器是一个低优先级线程 在java中我们可以创建任何具有高优先级的线程 那么是否有可能拥有我们自己定制的具有可变优先级的垃圾收集器线程 我们可以根据内存管理的级别进行设置 有人尝试过吗 如果是的话 您能分享一些关于如
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Google App Engine数据存储区字符串编码问题

    你好 我正在使用 Google App Engine 进行一个项目 并且需要存储一些字符串 我正在使用 Java 和JDOHelper getPersistenceManagerFactory transactions optional 在
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • JBoss 5 截断 base64 cookie 字符串的尾部 =

    从 JBoss 4 升级到 JBoss 5 后 我注意到最烦人的回归 它截断 base64 cookie 值的尾部等号 我花了很长时间才明白问题不是我的代码而是 JBoss 的 我用 google 搜索了一下 发现这是一个已知的问题issu
  • Java applet 是否会违反同源策略

    我需要请求一些东西并从其他域获取信息 我知道由于同源政策 javascript 无法做到这一点 我的另一个选择是通过我的服务器发出代理请求 我不希望请求来自我的服务器的 IP 也不想为我的服务器创建额外的负载 并且希望客户端这样做 是否可以

随机推荐

  • 如何在 64 位 Windows 上安装 SciPy?

    如何在我的系统上安装 SciPy 对于 NumPy 部分 SciPy 所依赖的 实际上有一个适用于 64 位 Windows 的安装程序 numpy 1 3 0 win amd64 py2 6 msi 是直接下载URL 2310144字节
  • Java - 通过 Java 套接字广播语音

    我创建了一个从客户端接收声音的服务器应用程序 然后广播该声音 该声音以字节形式存储 并将字节发送回连接到服务器的客户端 现在我只使用一个客户端进行测试 该客户端正在接收回语音 但声音一直断断续续 有人可以告诉我我做错了什么吗 我想我理解声音
  • Python 2 中的扩展元组解包

    是否可以在 Python 2 中模拟扩展元组拆包 具体来说 我有一个 for 循环 for a b c in mylist 当 mylist 是大小为 3 的元组列表时 它可以正常工作 如果我传入大小为 4 的列表 我希望相同的 for 循
  • Angular 2 变更检测 - 如何解决组件之间的循环依赖关系?

    我读到 Angular 2 变更检测是单向的 从组件树的顶部到底部 并且在一次通过后变得稳定 这意味着没有多个变更检测周期 考虑到这些假设 如果我们的父组件和子组件具有相互依赖的属性 会发生什么情况 例子 根据用户事件 父组件更新子组件属性
  • 卷曲 cookie 处理

    是否有可能使用 cURL 时 并非每个用户都使用相同的 cookie 因为我存储得到的 cookie 很酷 但是这个 cookie 会被每个人使用 而且应该如此 因为它是一个登录 cookie Charlie 这是 cookie 工作原理的
  • 语法错误:当前未启用对实验性语法“jsx”的支持

    我无法使用我创建的 npm 组件包 我已经成功发布了该包 但是当我在新代码中使用它时 它显示此错误 SyntaxError home trinendra Desktop react test node modules iconbox1 in
  • SSIS:创建具有不同行格式的平面文件

    我想创建一个平面文件输出 其中行的格式不同 文件有标题行 中间数据行 页脚行 文件如下所示 H deptcode123 deptNameXYZ totalemp300 E Sam Johnson address1 empCode1 many
  • window.open() 中的 name 参数是什么

    请有人告诉我这个窗口的名称是什么window open 是标题名称还是java脚本语言中的某个ID windowName 为新窗口指定的名称 该名称可用于再次引用该窗口 打开窗口后 您会想用它做各种各样的事情 例如移动它然后你就可以做
  • 如何使用面板上的图形类绘制多色文本?

    我想在面板上绘制以下文本 这是一个多颜色的文本 我找到了这个article关于绘制彩色文本 我用单词替换了字符 但它不起作用 我使用FillPath DrawPath来绘制文本 my code private void Form1 Pain
  • 将递归Python代码转换为非递归版本

    除非我们开始增加 unique 和 n symbols 和长度 否则此处提供的代码将有效 例如 在我的计算机上 n symbols 512 length 512 distinct 300 最终会出现此错误RecursionError 比较中
  • Windows批处理文件将X个文件从一个文件夹移动到另一个文件夹

    如果文件少于 20 个 我尝试使用批处理文件以 30 个块为单位移动文件 DataLoc 我修改了代码一个先前的问题 问题在于FMove文件的部分 无论我在里面放什么for线 它给了我一个错误 我希望这个有 HoldLoc 值 但由于我遇到
  • Javascript 对象和 JSON 对象有什么区别

    谁能用一个例子告诉我 Javascript 对象和 JSON 对象之间的区别 JavaScriptobject是 Javascript 中的一种数据类型 仅在 Javascript 中才有意义 你经常会看到 Javascript对象字面量像
  • 即使在postgres中使用listen_addresses ='*',远程登录也不起作用

    我想使用远程主机登录 postgres 我已经使用listen addresses 配置了postgresql conf文件 我已经配置了 pg hba conf 文件 host all all 0 0 0 0 0 md5 但我仍然无法登录
  • CSS3 标签朝右并使用位置或:after

    我正在尝试在 CSS 中构建这个形状 但我不知道如何将三角形 考虑到我有一个矩形作为标签的 主体 一个三角形作为尖端 朝右 因为我正在处理位置 所以当标签都可以具有不同的大小时 如何让三角形出现在矩形之后 我就是搞不出来 您可以检查小提琴
  • 在网络浏览器中输入 google.com 后按 Enter 键后会发生什么

    当我在网络浏览器中输入 google com 后按 Enter 键后 到底发生了什么 第一个数据包去往何处以及从那里去往何处 我想要详细信息 所以请有人帮助我 您是否尝试过研究输出traceroute www google com从命令行
  • 我不明白 Delphi 中的 Application.ProcessMessages 正在做什么[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我是德尔福的新手 我的主管向我解释说 Application ProcessMessages 可以防止应用程序冻结并分配一些额外的计算时间 但是在这个命令的文档中总是解释一些关于
  • 有没有办法修改 Jersey 生成的 XML 响应以包含样式表信息?

    在 JAXB 中 这是可能的 使用编组器对象 我不知道如何使用泽西岛做到这一点 我想知道是否有一种方法可以以某种方式注入类似的东西 在生成的 xml 响应中 请参阅 XmlHeader 注释 将其附加到您的资源方法中 例如这样 GET Pr
  • 纸张元素导入在 python 中不起作用

    Paper 元素无法在 python django 环境中导入 并且 出现导入错误 Uncaught TypeError Failed to resolve module specifier polymer polymer polymer
  • 适用于 .NET Core 的 Windows 窗体设计器和 WPF 设计器

    我最近听说 NET Core NET Core 3 0 的alpha版本支持Windows Forms和WPF 但是 Visual Studio 设计器 和 Visual Studio 不支持 NET Core版本Windows 窗体和 W
  • 为什么 Java 同步不能按预期工作?

    我试图弄清楚同步方法是如何工作的 根据我的理解 我创建了两个线程T1 and T2这将调用相同的方法addNew 由于该方法是同步的 难道它不应该先为一个线程执行 for 循环的所有迭代 然后再为另一个线程执行吗 输出不断变化 有时打印正确