JNA:对所有回调使用一个线程



我有一种情况,我使用JNA与一些本机代码回调,我注意到,对于每个回调,本机代码的主线程使它使一个新的java线程来处理回调。JNA是否有一种方法来指定哪个线程处理回调,以便我可以将它们都放在同一个线程上?目前,我每隔几秒钟就会得到数千个新线程,这是相当消耗资源的。

经过一番挖掘,我找到了正确的答案。我创建了一个callbackthreadinitializer并使用Native。addcallbackthreadinitializer方法将其与每个回调关联。这让他们都在同一条线上。如果你有一个完成的回调或者你发送了一些标志来表明这个回调是最后一个回调,你可以调用Native.detatch(true)在这种情况下分离线程并让gc清理它。如果你不这样做,它似乎会徘徊一段时间,有时会产生新的并关闭旧的。

最新更新