gpt4 book ai didi

java - 从 native 代码分派(dispatch)的 pthread 可以回调到 JNI 吗?

转载 作者:行者123 更新时间:2023-11-30 00:45:02 25 4
gpt4 key购买 nike

假设:从 Java 调用 C++ 代码相对简单。据我了解,C++ 代码与调用它的 Java 代码在同一线程中执行(如果我错了请纠正我)。如果 C++ 代码然后使用 pthread_key_create() 启动一个新的 native 线程,这个线程可以通过 JNI 回调到 Java 中吗?如果是这样,这怎么可能,因为代码将在 pthread 而不是 JVM 上的 Java 线程中执行?

最佳答案

As I understand it, the C++ code is executed in the same thread as the Java code calling it (correct me if I'm wrong)

JNIEnv 附加到线程,您不能在线程之间共享 JNIEnv。您的 native 函数都接收一个 JNIEnv 作为第一个参数,因此它对应于当前线程的 JNIEnv

If the C++ code then starts a new native thread with pthread_key_create(), can this thread call back into Java through JNI?

所有线程都是Linux线程,由内核调度。它们通常从托管代码开始(使用 Thread.start),但它们也可以在别处创建,然后附加到 JavaVM。例如,用 pthread_create 启动的线程可以附加 JNI AttachCurrentThreadAttachCurrentThreadAsDaemon 函数。在附加线程之前,它没有 JNIEnv,并且不能进行 JNI 调用。

If so, how is this possible, since the code would then be executing in a pthread instead of a Java thread on the JVM?

也请参阅之前的回复;)(前两句)

更多信息 herehere .

关于java - 从 native 代码分派(dispatch)的 pthread 可以回调到 JNI 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com