gpt4 book ai didi

java线程调用耗时的native方法时被阻塞

转载 作者:行者123 更新时间:2023-12-01 20:15:50 28 4
gpt4 key购买 nike

我有一个将调用 native 方法的线程。而且我不知道为什么当线程调用 native 方法时,它总是会停止并等待 native 方法完成。 native 方法完成后,线程将继续运行。问题是 native 方法非常耗时。但我希望我的 java 线程继续运行,即使 native 方法仍在运行。我不希望我的 java 线程停止并等待。

native 方法是一个jni函数,它将调用matlab编码器生成的c文件。代码在matlab中运行只需要1秒。但在android中运行需要15秒。

<小时/>

我的项目的简短演示:

在java中:

 new Thread(new Runnable() {
@Override
public void run() {
//record and get audio samples in real-time as an input to native method
//call native method
//print the result from native method
}).start();

在 native 方法中:

JNIEXPORT jobjectArray JNICALL
Java_com_example_user_MyProject_MainActivity_getpitch(JNIEnv *env, jobject instance,jdoubleArray array_) {

//call c function generated by matlab (the input is the array we get from java)
//return the results calculated by the c function to java

}
<小时/>

我的问题是,如果我希望我的java线程继续运行,即使 native 方法尚未完成,是否有任何解决方案。(因为我需要实时获取音频样本。如果线程停止,它不会获取音频样本。然后我们会错过很多样本。)

再次抱歉我的英语不好。这是我第一次发布问题。

最佳答案

why would my java thread stop and wait for native method to finish?

线程按顺序执行代码。在 native 调用完成之前,它不会执行 native 调用之后的代码。

And is there any solution if I want my java thread keep on running even though the native method hasn't finished.

然后使用两个线程:一个用于阻止对 native 库的调用,另一个用于执行您希望发生的任何其他操作。

关于java线程调用耗时的native方法时被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45840284/

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