在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代碼中的方法是線程安全的,以便在多線程環境下正確執行。