jni中的回调 - java

有没有办法从C将回调传递给Java代码。调用立即返回。稍后,在完成任务之后,Java代码可以调用该回调。

我有一个PHP的C扩展名,它调用Java存储在其中存储一些项目。可以使用同步和异步方法从商店中检索商品(我为商店提供了键列表和回调,它会调用该回调并在其中返回商品)。

我可以从扩展名同步检索项目,但现在我不知道如何异步进行。

  • 我的C代码是否可以通过某种方式提供指向java以后可以调用的函数的指针?
  • 或者是否有可能每次C代码要求异步检索项目时都创建一个Java线程,然后该Java线程调用一个C函数,该函数可以将这些项目返回给用户?
  • 作为最后的选择,我可能不得不用C代码创建一个线程,并在该线程中排队可以从Java检索的键。

    还是zend中有任何支持允许我将任务排队,而zend可以为队列中的每个任务逐个调用一个回调?

    参考方案

    Java调用C函数的方法是本机类方法。只需在Java中创建一些具有本机方法的类(可能实现您的回调接口)即可。使用JDK中的javah工具对其进行编译和处理-这将创建具有函数签名的标头。然后,您可以在本机代码中实现此功能。

    当您需要提供回调时-通过NewObject()创建此类的新实例并传递给Java代码。

    Java SHA1withDSA到PHP,可转换? - java

    使用PHP实现SHA1withDSA签名是否成功?失败报告here。PKCS8EncodedKeySpec prvSpec = new PKCS8EncodedKeySpec(prvKeyBytes); KeyFactory keyFactory = KeyFactory.getInstance("DSA"); PrivateKey pr…

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

    java:继承 - java

    有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…