4 c c++ java java-native-interface multithreading
我想知道是否可以notify()使用本机代码通知()一个java对象?
例如,假设我们在java中有一个线程正在等待如下信号.
void _do_something() throws Exception{
synchronized(__lock_){
__lock_.wait();
}
}
Run Code Online (Sandbox Code Playgroud)
那么是否可以__lock_从本机代码通知对象?!我应该将__lock_对象传递给c代码吗?那么C代码如何以及如何调用该notify()方法.任何帮助表示赞赏.提前致谢.
这在本机代码中是非常可行的.你需要使用JNI ......
那么是否可以从本机代码通知_ lock对象?!
当然,只要您的本机代码具有_ lock对象的句柄,您所要做的就是同步并在其上调用notify(就像您从本机代码调用任何其他java对象一样).
我应该将_ lock对象传递给c代码吗?
是.两者都是因为当你调用CallVoidMethod()JNI函数调用notify()时你需要它,还因为你需要输入/退出该对象的Monitor(JNI等效的方式说"synchronized(_ lock)"
那么C代码如何以及如何调用notify()方法
首先,您需要了解将本机代码映射到可以从java调用的内容的基础知识.然后你需要了解如何从该本机代码回调到java,当你理解这一点时,学习如何使用MonitorEnter,CallVoidMethod和MonitorExit都是一个问题.
不幸的是,JNI有时似乎是为了让人们远离.当你刚接触它时,很难进行适当的调试.我建议从小处着手抓住它并等待真实的东西直到你理解基础知识.
我对JNI的最好建议是遵守规则(至少在开始时),在每次调用后检查异常(并在获取它们时将它们转储到stderr或其他东西)并使用-Xcheck:jni运行java.有很多教程,当我用Google搜索时,我发现这一个在top10列表中,似乎没问题.
祝好运!