在C++中调用Java时,处理多线程可以通过以下几种方法实现:
synchronized
关键字来确保线程安全。然后,在C++代码中,你可以使用JNI函数调用Java方法。这里是一个简单的例子:Java代码(MyClass.java):
public class MyClass {
public synchronized void myMethod(String input) {
System.out.println("Received: " + input);
}
}
C++代码(main.cpp):
#include <jni.h>
#include <iostream>
extern "C" JNIEXPORT void JNICALL
Java_MyClass_myMethod(JNIEnv *env, jobject obj, jstring input) {
const char *inputStr = env->GetStringUTFChars(input, nullptr);
std::cout << "Received: " << inputStr << std::endl;
env->ReleaseStringUTFChars(input, inputStr);
}
编译并运行Java代码,然后使用C++代码调用Java方法。
Java代码(MyClass.java):
public class MyClass {
public void myMethod(String input) {
System.out.println("Received: " + input);
}
}
C++代码(main.cpp):
#include <iostream>
#include <jna/jna.hpp>
#include <jna/platform.h>
using namespace jna;
using namespace com.sun.jna.platform.win32;
int main() {
JNA_INSTANCE instance;
instance.load("path/to/your/java/library.dll");
MyClass myClass = instance.createInstance(MyClass.class);
myClass.myMethod("Hello from C++");
return 0;
}
编译并运行Java代码,然后使用C++代码调用Java方法。
在这两种方法中,你需要确保Java代码中的方法是线程安全的,以便在多线程环境下正确执行。