既存のJavaアプリケーション(ソースコードはありません)では、共有ライブラリを呼び出すプラグインを開発しています。 残念ながら、この共有ライブラリ(はCで書かれています)はスレッドセーフではありません。JNA経由でネイティブライブラリを呼び出す際の同時性問題
アプリケーションは共有ライブラリがこれらの並列スレッドによって呼び出され、自然にそれが(例:すでにオープンしているファイルは、などを開くことが防止されている)の同時実行のために多くのエラーを与えているので、複数の同時実行スレッド内私のプラグインを呼び出している
JNA経由で共有ライブラリにアクセスしています。私はこの共有ライブラリのソースコードを持っていますが、スレッドセーフなライブラリへの変換は時間がかかり、現時点では不可能です。 この問題を解決する他の方法がありますか?
すべてのネイティブ関数
が唯一のJavaメソッドからアクセスされているので、私は同期この方法 を作ることは解決策になることができると思います。同意しますか?私はこれを試しましたが、残念ながら問題は解決されません。ログファイルでは、Javaメソッドが同時に呼び出されていることがわかります。したがって、これを解決するための自分の努力が失敗しました。
はい私のメソッドは静的ではありませんでした。静的に変更しましたが、今問題は解決されているようです。ありがとうございます... – user544799
JNAはネイティブメソッドが同時に呼び出されないようにNative.synchronizedLibrary(Library)を提供しています。 – technomage