pla*_*cys 32 java compatibility signals sun
我开始研究找到sun.misc.Signal该类的替代方案,因为它可能在即将到来的JDK中不受支持(我们目前正在研究1.6).当我构建项目时,我得到:
警告:sun.misc.SignalHandler是Sun专有API,可能会在将来的版本中删除
我遇到了多种解决方案,但它们不适合我的项目,例如在这个问题中.
这在我的情况下是不可接受的,因为:
因此,理想的解决方案是找到像这个类的新Oracle版本或者以相同方式工作的东西.这样的解决方案是否存在?
dim*_*414 20
在学习Java中的信号处理时,您会发现无限重复,我们鼓励您避免编写直接依赖于信号的Java代码.一般的最佳做法是通过注册关闭钩子来允许JVM在ctrl+ c和其他信号上正常退出.直接处理信号会使您的Java程序依赖于操作系统.
但有时那没关系,你真的,真的想自己处理信号.
尽管它没有作为官方JDK API的一部分公开,但JVM的某些部分必须处理信号(为了触发关闭钩子和退出),并且该组件是sun.misc.Signal.虽然这是一个实施细节,因此可能会改变,但实际上不太可能.如果要更改,则需要使用等效机制替换,并且可能在" Java平台故障排除指南"中进行了说明.
兄弟姐妹类sun.misc.Unsafe被广泛使用,同样没有记录.现在,正在向试图消除这一类,因为它是"积极的工作成为非标准的,但必要时,各种方法的'垃圾场’ ",但目前的建议,同时限制一些不规范的API,一直都sun.misc.Unsafe和sun.misc.Signal默认选项.实际上阻止访问这些类的早期计划仍然包括一个命令行标志,允许访问它们以实现向后兼容性.
总之当你不能依靠sun.misc.Signal和必须规划,这种行为改变了不测,这是极不可能的,这种行为将JDK 10前改变,如果它要么将一个新的,更好的机制很可能被引入或将有如果需要,可以合理地重新启用它.
但是,将依赖于任何sun.misc类的代码划分为尽可能小的范围是明智的- 为信号处理创建一个包装API,以便调用者不需要直接与之交互sun.misc.这样,如果API发生变化,您只需要更改包装器的实现,而不是所有的信号处理代码.
小智 5
如果您不能接受sun.misc.Signal在最近的将来可能发生变化的任何可能性,那么只需使用 JNI 接口以编译为机器代码的语言(如 C)自己实现信号处理,并使用System.load. 使用JNI,java可以使用C,C可以使用java。我第一次使用 JNI 时,我发现能够在我的 C 程序中使用整个 java api 很有趣。
现在您唯一需要担心的是操作系统界面是否会发生变化,或者更有可能的是,所用操作系统的选择是否会发生变化。
Jon*_*n B -13
最好的选择是放弃信号,因为它们没有得到很好的支持。
IPC 的替代方案:
| 归档时间: |
|
| 查看次数: |
9970 次 |
| 最近记录: |