我正在尝试编写一些通过 JNA 执行等待的代码(例如,通过调用 Kernel32 函数 WaitForSingleObject),但我也希望在调用 Thread.interrupt() 时等待完成;我假设 Java 使用类似 Event 对象的东西来实现中断;有什么方法可以从 Java 获取事件以便在调用 WaitForMultipleObjects 时使用它?或者,如果线程中断,我是否可以通过其他方式安排等待完成?
最佳答案
Java 通过 NIO 支持它,很少有人知道,有问题的类是抽象的,但这不是问题:
java.nio.channels.spi.AbstractInterruptibleChannel
。它有 3 个有趣的方法:begin()
和 end()
,它们是 final方法,另外还有一个您必须实现的方法:“protected abstract void implCloseChannel() throws IOException “
该方法将从调用 interrupt() 的线程中调用,所以要小心。
使用非常简单:在输入 native 代码之前调用 begin,在返回时调用 end()。处理 implCloseChannel 中的中断。
编码愉快!
关于java - 使用 JNA native 等待调用检测线程中断 (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889161/