我有一种情况,我正在使用带有回调的一些本机代码的JNA,我注意到对于每个回调,本机代码的主线程使它创建一个新的java线程来处理回调。有没有办法让JNA指定哪个线程处理回调,所以我可以在同一个线程上获取它们?就目前而言,我每隔几秒钟就会获得数千个新线程,这是一个相当大的资源消耗。
答案 0 :(得分:3)
经过大量挖掘后,我找到了正确的答案。我创建了一个CallbackThreadInitilizer并使用Native.addCallbackThreadInitilizer方法将它与每个回调相关联。这使他们都在同一个线程上。如果你有一个完成的回调或者你发送了一些标志,表明这个回调是你可以调用Native.detatch(true)的最后一个,以便分离线程并让它被gc清理。如果你不这样做,它似乎会闲逛一段时间,有时会制作新的并关闭旧的。我从来没有看到它一次超过3个。