为什么在Java的Object类中声明wait()和notify()?

2023-12-01

为什么是wait() and notify()中声明的方法Object类,而不是Thread class?


因为,您等待给定的对象(或者具体来说,它的监视器)来使用此功能。

我认为您可能误解了这些方法的工作原理。它们不只是处于线程粒度级别,即not只是打电话的情况wait()并被下一个电话唤醒notify()。相反,你总是打电话wait()在一个特定的对象上,并且只会被调用唤醒notify 在那个物体上.

这很好,因为否则并发原语就无法扩展;它相当于拥有全局名称空间,因为任何对notify()程序中的任何地方都有可能搞砸any并发代码,因为它们会唤醒阻塞在wait()称呼。因此,您在特定对象上调用它们的原因;它为等待通知对提供了操作的上下文,因此当您调用myBlockingObject.notify(),在私有对象上,您可以确定只会唤醒类中调用 wait 方法的线程。某些可能正在等待另一个对象的 Spring 线程将不会被此调用唤醒,反之亦然。

编辑:或者从另一个角度解决它 - 我希望从你的问题中你认为你会得到等待线程的句柄并调用notify() on 那个线程来唤醒它。不这样做的原因是你必须自己做很多家务活。要等待的线程必须在其他线程可以看到的地方发布对自身的引用;这必须正确同步以增强一致性和可见性。当您想要唤醒一个线程时,您必须获取该引用,唤醒它,然后将其从您读取它的位置中删除。与仅调用相比,涉及更多的手动脚手架,并且出错的可能性更大(特别是在并发环境中)myObj.wait()在睡眠线程中然后myObj.notify()在唤醒线程中。

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

为什么在Java的Object类中声明wait()和notify()? 的相关文章

  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • 最多应用一次交换操作以获得严格递增序列

    我正在网上的各个网站上做一些 DS A 问题进行练习 我遇到了这个问题 给定一个非负整数数组 您可以从此数组中选择任何数字并交换其中的任意两位数字 如果在交换操作之后数字包含前导零 则可以省略它们并且不考虑它们 您的任务是检查是否可以最多应
  • 如何找到 tibble 列中最长的重复序列?

    我更新了我的问题 因为我的输出表还需要一列 我有以下内容 library tibble my tbl lt tribble year event id winner id 2011 A 4322 2012 A 4322 2013 A 432
  • 外部源文件中不会发生重新定义错误

    下面是我的代码 main c int t double t 0 int main return 0 我们可以看到上面的代码没有编译 gcc 抛出一个错误 t redefinition different basic types 这很公平 但
  • 为什么我的 UITableView 在 5 行之后重复行?

    我的数据库中有 7 行 我确认所有数据都通过 NSLog postArray 成功传输到 iOS 端 它给出了 7 但是 当我运行我的应用程序时 它只会显示前 5 行 然后是前 2 行 而不是第 6 行和我的数据库中的第七行 另外 当我 N
  • 将大型 csv 文件加载到 neo4j 中

    我想加载一个 csv 其中包含维基百科类别 rels csv 之间的关系 类别之间有 400 万个关系 我尝试通过更改以下参数值来修改设置文件 dbms memory heap initial size 8G dbms memory hea
  • Fortran - 显式接口

    我对 Fortran 非常陌生 为了我的研究 我需要运行一个庞大的模型 所以我一边学习一边学习 所以如果我问了一个 愚蠢 的问题 我很抱歉 我正在尝试编译 Mac OSX 从命令行 并且我已经设法解决了一些问题 但现在我遇到了一些我不确定如
  • flutter中不使用webview或浏览器如何实现paypal?

    我正在尝试在我的 flutter 应用程序中实现 paypal 而不使用 webview 或浏览器 我尝试过 flutter braintree 和 braintree payment 包来进行flutter 但这两个包都重定向到网络浏览器
  • Java:将数组传递给 println [重复]

    这个问题在这里已经有答案了 下面是我刚刚编造的一个示例 旨在帮助我理解 java 的内部工作原理 public class Main public static void main String args int a a new int 1
  • 如果 ES 中存在索引,是否有基于 API 的方法在 Kibana 中创建索引模式

    我在 ES 中有一个索引 我需要使用 API 调用在 kibana 中创建一个相同的索引模式 在这个创建中 我什至想设置将成为时间戳列的列 任何帮助都是赞赏 你可以做到 但你需要自己构建整个结构 索引模式定义如下所示 PUT kibana
  • 如何在ggtern中使用geom_polygon正确填充颜色?

    这是我用来在三元图中创建边界的代码 library ggtern DATA lt data frame x c 0 0 0 04 y c 1 0 6 0 575 z c 0 0 4 0 385 xend c 0 4 0 21 0 1 yen
  • 来自映射 api 的 EF Core 列名称

    在 EF 6 1 中引入了映射 API 我们最终可以访问表名称和列名称 获取表名称是 EF Core 中一个非常好的变化 但我还没有发现如何获取列名称 对于任何对此感兴趣的人来说 我是如何获取最新版本 RC1 中的表名的 context M
  • 表被指定两次,既作为“UPDATE”的目标,又作为 mysql 中数据的单独源

    我在 mysql 中有以下查询 我想检查是否分行编号 and year of finance输入来自分支主控等于分行编号 and year of manager然后更新状态manager表反对分行编号 in manager UPDATE m
  • Excel MATCH 字符限制

    我用下面的公式 INDEX Dict A A MATCH A2 Dict A A 0 1 但 MATCH 仅适用于 256 个字符以下的文本 有什么办法可以克服这个限制吗 为了适应部分匹配使用SEARCH像这样 INDEX Dict A A
  • grunt-contrib-sass:不兼容的字符编码:UTF-8 和 CP850

    当尝试使用 grunt 将我的 sass 文件转换为普通 css 文件时 我收到警告 Warning Encoding CompabilityError incompatible character encodings UTF 8 and
  • Numpy 按元素进行运算

    假设我有一个长度为 n 的列向量 y 并且有一个大小为 n m 的矩阵 X 我想检查 y 中的每个元素 i 该元素是否位于 X 中的相应行中 最有效的方法是什么 例如 y 1 2 3 4 T and X 1 2 3 3 4 5 4 3 2
  • Android中ListView缓存的实现方法

    我有一个 ListView 其中包含大量数据 第一次 我从 Web 服务加载所有数据 现在我想缓存该数据 这样 如果我再次打开该页面 我可以从缓存中获取数据 而不是再次查询 Web 服务 我怎么做 我假设您正在存储从以下位置检索的数据Web
  • 限制鼠标在指定窗口句柄上移动

    我正在寻找在 Windows 上模拟 Safari 的信息亭模式 OSX 无法与我的输入硬件配合使用 并且 Chrome 的 GPU 加速对于我正在使用的机器来说太慢 到目前为止 唯一可行的解 决方案是运行 Safari 并发送 F11 全
  • 如何使用 Google Drive API 检索最近的已删除文件列表

    我最近删除了 Google Drive 中的大量文件 并将它们移至垃圾箱 我想永久删除它们 但垃圾箱中的文件不能按删除日期排序 只能按修改日期排序 删除时不会更新 因此 我想利用 Google Drive API 来枚举垃圾并确定其被删除的
  • 相当于 with(来自 Pascal)到 C/C++

    相当于什么with从Pascal语言到C C 语言 A with语句是引用记录字段或对象的字段 属性和方法的简写 Example With Object do begin Width 200 Height 300 end 相当于 Objec
  • 为什么在Java的Object类中声明wait()和notify()?

    为什么是wait and notify 中声明的方法Object类 而不是Thread class 因为 您等待给定的对象 或者具体来说 它的监视器 来使用此功能 我认为您可能误解了这些方法的工作原理 它们不只是处于线程粒度级别 即not只