我在使用 C++ 信号
签名
struct sigaction sigact;
并将所有属性设置为使用信号
现在我想在 Java 中使用它在 java 中的等价物
到include "signal.h"
我有两个线程:
从程序开始运行一次
另一个在警报信号处运行
如图所示,我使用 Signals 在 C++ 中实现了该功能,现在我想使用 java 来实现它
编辑以提出我的目标:
实际上我的目标是运行第二个线程当信号从第一个线程到达时
我在使用 C++ 信号
签名
struct sigaction sigact;
并将所有属性设置为使用信号
现在我想在 Java 中使用它在 java 中的等价物
到include "signal.h"
我有两个线程:
从程序开始运行一次
另一个在警报信号处运行
如图所示,我使用 Signals 在 C++ 中实现了该功能,现在我想使用 java 来实现它
编辑以提出我的目标:
实际上我的目标是运行第二个线程当信号从第一个线程到达时
因此听起来像是典型的“ XY 问题”。
在纯 Java 中,您无法访问操作系统信号。它们是特定于平台的,Java 努力与平台无关。另外:使用 JNI 从信号处理程序调用 Java 可能很“有趣”(如Dwarf Fortress中所述)。
所以你必须回到绘图板上,想想你想要解决的问题是什么,而不是想着如何用信号来解决它。
也就是说:如果你坚持使用信号并且不害怕使用可能会随心所欲改变的内部东西:看看sun.misc.Signal
.
编辑现在问题很清楚了,信号发生在一个 JVM中。因为这个信号在 Java中绝对是错误的。
所以最简单的解决方案是直接从第一个线程中创建并启动第二个线程。无需信号。
Object.wait()
下一个最佳解决方案是在第二个线程中使用(使用除自身之外的任何对象实例Thread
)和Object.notify()
/或notifyAll()
从第一个线程编写“集合点” 。在 Java 教程中搜索这些术语会找到足够多的示例。