语句执行与同步方法执行交错

2023-12-03

我在理解同步关键字功能时遇到一些困难。 根据java文档和其他教程,据说当使用synchronized关键字时,两个线程之间不可能在该方法的语句之间进行交错。

但是,请看下面的代码。

public class LockThread implements Runnable {
     String name;
     public LockThread(String name) {
          this.name = name;
     }
     public static void main(String[] args) {
          new Thread(new LockThread("a")).start();
          new Thread(new LockThread("b")).start();
     }
     public void run() {
          locked(Thread.currentThread().getId());


     }

 synchronized void locked(long l) {
      System.out.println(name+"-"+l +  "---> Printed from "   + Thread.currentThread().getName());
      System.out.println(name+"-"+l +  "---> Printed from "   + Thread.currentThread().getName());
 }

}    

根据我的理解,程序输出应该始终以线程 0 和线程 1 不应该交错的方式进行。 但是多次执行这段代码,我得到了交错的输出。



    With interleaving (Output I expect)
    a-9 ---> Printed from Thread-0
    a-9 ---> Printed from Thread-0
    b-10 ---> Printed from Thread-1
    b-10 ---> Printed from Thread-1

Without Interleaving (This is one another output I see for the same code above)
    a-9 ---> Printed from Thread-0
    b-10 ---> Printed from Thread-1
    a-9 ---> Printed from Thread-0
    b-10 ---> Printed from Thread-1
  

请帮我理解这个问题..

提前致谢..


The synchronized关键字可防止两个线程运行在同一对象上同步的代码。

每个线程都在不同的对象上同步(this),所以没有效果。

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

语句执行与同步方法执行交错 的相关文章

  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • (Java) App Engine 中的静态文件无法访问

    The 示例文档 http code google com appengine docs java gettingstarted staticfiles html表示您只需将文件放在 war 或子目录 中 并且应该可以从主机访问它们 只要它
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • 什么是竞争条件?

    编写多线程应用程序时 最常见的问题之一是竞争条件 我向社区提出的问题是 竞赛条件是什么 你如何检测它们 你如何处理它们 最后 如何防止它们发生 当两个或多个线程可以访问共享数据并且它们试图同时更改它时 就会出现竞争条件 由于线程调度算法可以
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 每个客户端一个线程与线程服务器的排队线程模型之间的相对优点?

    假设我们正在构建一个线程服务器 旨在在具有四个核心的系统上运行 我能想到的两种线程管理方案是每个客户端连接一个线程和一个排队系统 正如第一个系统的名称所暗示的那样 我们将为每个连接到服务器的客户端生成一个线程 假设一个线程始终专用于程序的主
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的

随机推荐

  • 如何将一组标准参数传递给 async.js 系列中的每个函数?

    给定以下 node js 模块 我将如何调用数组中的函数orderedListOfFunctions通过每一个response多变的 var async require async var one require one js var tw
  • 转换 Base64 GZipped 字符串 Objective-c 或 Swift

    我从网络服务收到一个字符串 如下所示 CAAAAB LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvv
  • IE中div宽度问题

    在发布之前 我仔细阅读了几个与此类似的问题 但没有找到适合我的解决方案 我的网站中有一个页面不适合我用于其他每个页面的模板 因为为该页面生成的信息表太宽了 为了使表格显示我使用overflow x visible 结果正是我在除 IE 之外
  • 如何在android中获取epub书籍的图像

    我试图将 epub 书读入我的 android 应用程序 并成功地将文本输入到我的应用程序中 但无法加载 epub 书的图像 实际上 当我们使用 epub 库阅读 epub 书时会发生什么 如果它存储的内容比 epub 书的图像所在的位置要
  • ANSI 转义代码在 python 解释器上不起作用 [重复]

    这个问题在这里已经有答案了 ANSI 代码无法在我的 python 解释器上运行 我想为这个项目的一些印刷品上色 我查找了如何为打印字符着色并找到了 ANSI 转义码 因此我在解释器上尝试了它 但它不起作用 例如 print 033 32m
  • Chrome 扩展程序 - 查看扩展程序选项卡是否打开

    我已经设置了当我单击 extn 图标时 我的 extnindex html opens 如果我第二次单击该图标 我不希望它打开第二个选项卡 我希望它能够聚焦已打开的选项卡 如果它已打开 问题在于if it s open部分 理想情况下 我不
  • TaskFactory.FromAsync 与 BeginGetRequestStream/EndGetRequestStream 挂起

    我有一个这样的方法 在声明时挂起responseObject使用 Task Factory FromAsync private async Task
  • 在 JavaEE 应用程序中使用 Jackson 作为 JAXB-JSON 处理器

    我看过很多关于此的文章和问题 但我就是不明白它的作用 我的目标是在 JavaEE 应用程序中使用 Jackson 作为 JSON 处理器 到目前为止我有什么 pom xml 要么这个
  • PowerShell 编码命令失败

    我试图使用 Powershell 的 EncodedCommand 标志弹出一个简单的消息框 但它一直失败 我在过去的几个小时里尝试过谷歌搜索 但似乎无法正常工作 它几乎看起来像一个编码错误 但我使用的是常规 UTF 8 和标准 ASCII
  • 执行非查询过程不工作asp.net core

    我想执行一个存储过程 该过程返回三个值 电子邮件 姓名 公司 ID 并获取一个参数 公司 ID 但它不起作用 我创建了一个具有这些属性的类和一个返回数据的存储过程 由它显示DatabaseFacade error 我的代码是 List
  • 如何计算图像的对比度?

    假设我有一个opencv BGR image img 如何计算该图像的对比度 对比度的一种定义是均方根对比度 可以按下式计算 首先 改造BGR image img到灰度 img grey cv2 cvtColor img cv2 COLOR
  • 如何水平居中对齐 div 内的文本?

    这可能是个愚蠢的问题 但我不知道如何得到这个 编辑 我只想将文本水平居中而不是图像 并且图像必须保持文本的基线 div img style width 30px height 60px display inline src http pla
  • 如何在字符级别对句子进行one-hot编码?

    我想将一个句子转换为一个 one hot 向量数组 这些向量将是字母表的独热表示 它看起来像下面这样 hello h 7 e 4 l 11 o 14 会成为 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 如何将 SAX 与 Nokogiri 一起使用?

    我想解析一个非常大的文件 240Mb 并且必须使用 SAX 以避免将文件加载到内存中 我的 XML 看起来像
  • C# 泛型类型约束类可能不是

    我想排除某些类型在泛型类中使用 我知道如何进行约束以确保泛型类型是某种 接口 类型 但我似乎不知道如何exclude 多种 类型 例如 我想要一个泛型类来排除 int 和 uint 但不排除 DateTime 因此并非所有基元都可以被排除
  • 我的应用程序对 Google Play 商店中高于我的 targetSdkVersion 的设备是否可见?

    我已浏览以下链接 但它们没有为我的问题提供清晰明确的答案 这是我可以从答案中得出的结论 targetSdkVersion表示该应用程序针对目标版本进行了测试 并将在所有 Android 版本上运行minSdkVersion to targe
  • 如何编写一个每天午夜运行脚本的 cron?

    我听说 crontab 是一个不错的选择 但是我该如何编写该行以及将其放在服务器上的哪里 这是一个很好的教程关于什么是 crontab 以及如何在 Ubuntu 上使用它 您的 crontab 行将如下所示 00 00 ruby path
  • 指向由映射定义的子数组的指针

    我想定义一个指向子数组的指针 对于一个简单的范围 这很容易完成pointer gt array i j 但我不知道如何对这样的地图执行此操作k k1 k2 k3 如果我定义另一个数组 我可以使用类似的循环array2 array1 k j
  • MVC3 部分视图

    还在学习MVC3 EF 现在我正在连接到 MySql 但我相信这不相关 为简单起见 我决定为我的测试应用程序使用一个数据库 并且我添加了一个类别来区分数据 例如 我有新闻 事件 信息和页面类别 现在 当涉及到在主页的视图中列出内容时 我想列
  • 语句执行与同步方法执行交错

    我在理解同步关键字功能时遇到一些困难 根据java文档和其他教程 据说当使用synchronized关键字时 两个线程之间不可能在该方法的语句之间进行交错 但是 请看下面的代码 public class LockThread impleme