sun.misc.Signal 的替代品

2024-02-07

我开始研究寻找替代方案sun.misc.Signal类,因为即将推出的 JDK 可能不支持它(我们目前正在开发 1.6)。当我构建项目时,我得到:

警告:sun.misc.SignalHandler 是 Sun 专有的 API,可能是 在未来版本中删除

我遇到了多种解决方案,但它们不适合我的项目,例如在这个问题 https://stackoverflow.com/questions/5023520/sending-signals-to-a-running-jvm.

这在我的情况下是不可接受的,因为:

  • 信号不仅仅用于杀死应用程序
  • 该应用程序非常庞大 - 模块/JVM 之间通信的每一个概念上的改变都可能需要数年时间才能实现

因此,理想的解决方案是找到此类的新 Oracle 版本或以相同方式工作的东西。这样的解决方案存在吗?


As you will find repeated ad infinitum when learning about signal handling in Java, you are encouraged to avoid writing Java code that depends directly on signals. The general best practice is to allow the JVM to exit normally on ctrl+c and other signals by registering a shutdown hook https://docs.oracle.com/javase/8/docs/technotes/guides/lang/hook-design.html instead. Handling signals directly makes your Java program OS-dependent.

但有时这没关系,而且您真的非常想自己处理信号。

尽管它没有作为官方 JDK API 的一部分公开,但 JVM 的某些部分必须处理信号(以便触发关闭挂钩并退出),并且该组件是sun.misc.Signal。尽管这是一个实现细节,因此could改变,实际中不太可能。如果要改变,则需要用等效的机制替换,并且可能记录在Java 平台故障排除指南 http://download.java.net/jdk9/docs/technotes/guides/troubleshoot/signals.html.

兄弟班sun.misc.Unsafe被广泛使用并且是同样无证 https://stackoverflow.com/questions/16819234/where-is-sun-misc-unsafe-documented。人们正在积极努力尝试删除此类,因为它是“成为非标准但必要方法的“垃圾场” https://docs.google.com/document/d/1GDm_cAxYInmoHMor-AkStzWvwE9pw6tnz_CebJQxuUE/edit”,但是目前的提案 http://openjdk.java.net/jeps/260,同时限制一些非标准API,保留两者sun.misc.Unsafe and sun.misc.Signal默认可用。实际上阻​​止访问这些类的早期计划仍然包含一个命令行标志,以允许访问它们以实现向后兼容性。

短时间内你cannot依靠sun.misc.Signal and must为这种行为改变的可能性做好计划,不大可能这种行为将在 JDK 10 之前发生变化,如果发生变化,将会有一个新的、更好的机制probably被引入,或者如果需要的话将有一个合理的方法来重新启用它。

然而,明智的做法是将依赖于任何sun.misc类的范围尽可能小 - 创建一个用于信号处理的包装 API,以便调用者不需要直接交互sun.misc。这样,如果 API 发生更改,您只需更改包装器的实现,而不需要更改所有信号处理代码。

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

sun.misc.Signal 的替代品 的相关文章

随机推荐

  • SQL Server通讯协议问题

    我正在使用 VSTS 2008 C ADO Net SQL Server 2008 我对 SQL Server 2008 将使用哪种通信协议的问题 我的问题的更多详细信息 如果连接字符串看起来像这样 是否使用命名管道或 TCP IP 使用不
  • Vue index.html favicon 问题

    我正在使用 Vue 2 0 和 Vue CLI 3 0 我试图让 favicon ico png 文件正常工作 但一点运气都没有 我已将问题缩小到以下范围 由yarn build生成的index html文件转换了这行html代码 to 如
  • 创建我的第一个 JDBC Realm(Glassfish V3)

    我想为我的 Web 应用程序创建一个 JDBC 领域 由于我的用户彼此之间非常不同 我只需要一个表 其中包含领域的用户名和密码 我决定在我的数据库中创建一个名为 ROLE 的新表 与其他用户表的一对一关系 This is how my us
  • 如何知道应用程序正在关闭

    有一个 WPF 应用程序 我想在应用程序关闭时记录 但我无法修改应用程序 一些限制 只是因为业务 因此 我在现有应用程序中创建了一个不可见的表单组件 添加为 dll 库 因此不需要修改现有应用程序 但问题是 我的隐形组件如何知道应用程序正在
  • 上传前预览多张图片

    我想预览多个图像 但问题是如果我上传 2 个图像 我的代码就可以工作 我想预览与用户上传的一样多的内容 这是我的 JavaScript var abc 0 Declaring and defining global increement v
  • C#:获取域中计算机的信息

    为了获取网络中某台计算机的信息 我应该在 C 中使用哪些类 例如谁登录了该计算机 该计算机上正在运行什么操作系统 打开了哪些端口等 查看系统管理 http msdn microsoft com en us library system ma
  • TableTools 导出在多个 JQuery 选项卡上的 DataTables 中不起作用

    我使用 DataTables 1 8 2 TableTools 2 0 1 和 JQuery 1 6 4 在三个 jQuery 选项卡上分别显示一个表格 TableTools 为表格提供了复制 Excel PDF 打印导出功能 并且仅适用于
  • 描述符的 Python 文档字符串

    我使用描述符来定义接口类的寄存器 class Register object def init self address docstring instance docstring self address address self doc
  • 当你没有在 ruby​​ 中指定异常类时,你会捕获哪些异常?

    当您不指定这样的异常类时 您会捕获哪些异常 begin do something rescue puts Exception end 根据我的副本Ruby 编程 1 9 不带参数的救援子句被视为具有参数StandardError 这是来自的
  • 如何在 Windows 中安装适用于 Python 3.4 的 pandas?

    根据the docs http pandas pydata org pandas docs dev install html 这应该有效 从 PyPI 安装 pandas 可以通过 PyPI 中的 pip 安装 点安装熊猫 这可能需要安装许
  • TypeScript:在事件中使用 jquery $(this)

    HTML div div
  • 对每个请求执行代码

    我希望能够对每个将数据填充到 ViewData 的请求执行一些代码 目前 我有一个基本控制器类 我的所有控制器都继承自该类 并且我重写 OnActionExecuting 并在那里执行它 我对这种方法唯一关心的是 创建新控制器的人必须继承基
  • 在事件处理程序中发送不带 XHR 的 http 请求

    如何使用 javascript 作为事件处理程序通过 post get 方法发送 http 请求 谢谢 保罗 好吧 你不想使用 Ajax 您可以使用事件处理程序来提交表单 a href send a
  • Salesforce PhoneGap iPhone 应用程序中的 oAuth2 问题(远程访问应用程序授权问题)

    我使用 PhoneGap 创建了一个 iPhone 应用程序 我遵循了本教程中的代码 构建由 Database com 提供支持的 PhoneGap 移动应用程序 http wiki developerforce com page Buil
  • Android listview - 获取自定义列表视图的文本

    我正在开发一个应用程序 在其中创建了一个自定义列表视图 列表视图xml代码如下
  • 使用 Python 实现 AutoCAD 自动化

    我对 Python 和 AutoCAD 非常陌生 所以请耐心等待 我正在尝试使用 Python 来自动化 AutoCAD 中的设计周期 到目前为止 我可以通过 Python 在 AutoCAD 中添加点和线 但我希望能够将线型更改为虚线 我
  • 安全的原子文件复制操作

    我需要将文件从一个位置复制到另一个位置 如果文件已存在于目的地 不覆盖 我需要抛出异常 或至少以某种方式识别 我可以首先使用 os path exists 检查 但极其重要的是 不能在检查和复制之间的短时间内创建文件 是否有一种内置的方法可
  • 从 XBee 接收的 pySerial 数据未正确显示

    我正在尝试让多个 XBees 作为传感器和输出设备运行 以将其样本发送到按如下方式连接的协调器 XBee 并根据指示打开和关闭这些远程 XBees 上的开关 我的这个 收到数据 问题似乎与 Stack Overflow 问题类似pySeri
  • 用于显示和编辑的 MVC 同一视图

    我有一个部分视图用于在弹出对话框中编辑人员详细信息 但他们也希望有 显示 模式 该模式禁用视图中的所有可编辑文本框 下拉列表框和链接 有人可以告诉我如何轻松实现这 不使用 JavaScript 您可以使用带有条件的相同视图来禁用编辑器 但这
  • sun.misc.Signal 的替代品

    我开始研究寻找替代方案sun misc Signal类 因为即将推出的 JDK 可能不支持它 我们目前正在开发 1 6 当我构建项目时 我得到 警告 sun misc SignalHandler 是 Sun 专有的 API 可能是 在未来版