从C/C+;通知java对象+;密码?

从C/C+;通知java对象+;密码?,java,c++,c,multithreading,java-native-interface,Java,C++,C,Multithreading,Java Native Interface,我想知道是否可以用本机代码通知(notify())一个java对象 例如,假设java中有一个线程正在等待一个信号,如下所示 void _do_something() throws Exception{ synchronized(__lock_){ __lock_.wait(); } } 那么,是否可以从本机代码通知\uuuu锁定\uu对象?! 我是否应该将\uuuu lock\uu对象传递给c代码?因此,C代码如何调用notify()方法。 感谢您的帮助。 提前感谢。

我想知道是否可以用本机代码通知(
notify()
)一个java对象

例如,假设java中有一个线程正在等待一个信号,如下所示

void _do_something() throws Exception{
   synchronized(__lock_){
      __lock_.wait();
   }
}
那么,是否可以从本机代码通知
\uuuu锁定\uu
对象?! 我是否应该将
\uuuu lock\uu
对象传递给c代码?因此,C代码如何调用
notify()
方法。 感谢您的帮助。
提前感谢。

这在本机代码中非常可行。但是你需要使用JNI

那么是否可以从本机代码通知_lock对象

当然,只要您的本机代码有一个_lock对象的句柄,您所要做的就是对它进行同步并调用notify(就像您从本机代码调用任何其他java对象一样)

我应该将_lock对象传递给c代码吗

对。这既是因为在调用CallVoidMethod()JNI函数调用notify()时需要它,也是因为需要进入/退出该对象的监视器(JNI等价于“synchronized(_lock)”的说法)

那么C代码如何调用notify()方法呢

首先,您需要了解将本机代码映射到可以从java调用的东西的基础知识。然后,您需要了解如何从本机代码回调到java中,当您了解了这一点时,就需要学习如何使用MonitorCenter、CallVoidMethod和MonitorExit

不幸的是,JNI有时似乎被设计成让人远离。当你是新手时,很难进行正确的调试。我建议你从小处着手,掌握它,然后等你了解了基本知识后再开始真正的调试

我对JNI最好的建议是遵守规则(至少在开始时),在每次调用后检查异常(并在得到异常时将其转储到stderr或其他地方),然后使用-Xcheck:JNI运行java。 周围有很多教程,我在谷歌搜索时发现,它似乎还不错


祝你好运!< /P>你试过像其他java方法一样调用“通知”吗?请添加C++代码谢谢兄弟,还有一个问题,我应该同步(同步块)<代码>在c/c++代码中也是如此?!如果是,怎么做?我应该调用什么特定的方法吗?或者这就像在没有同步的情况下调用另一个方法一样?正如我所说,执行synchronized()的JNI等效方法是在对象上调用MonitorEnter/MonitorExit(输入块的开头,离开块时退出).notify调用与“synchronized(_lock){_lock.notify();}”文档相同,如下所示: