我在这里https://stackoverflow.com/a/12901159/6655884找到了一个函数调用,该函数将线程与AttachCurrentThread
附加在一起,进行调用,然后与DetachCurrentThread
分离。
我想知道此过程是否昂贵。我有一个C ++函数
void sendEvent(Event event) {
//call java function here
}
将由多个C ++线程调用以将事件发送到Java端,因此我不能简单地附加一个线程,也永远不要分离它,因为许多不同的线程将调用sendEvent
。因此,我想知道是否在每次AttachCurrentThread
调用时先执行Java DetachCurrentThread
,然后再调用Java sendEvent
。如果是,该怎么办?
答案 0 :(得分:4)
尽管您可以在每个JNI调用的基础上附加调用线程,但实际上不应这样做,除非您别无选择。本机线程必须先将自身附加到JVM,然后才能进行JNI调用。为了避免不必要的开销,线程实际上应该尽快附加自身(至少在第一个JNI调用之前),并保持连接状态,直到不再需要进行任何进一步的JNI调用为止。