使用したいライブラリの作成者がコードをスレッド セーフに設計していない場合、2 つのスレッドが同時にそれを呼び出すのを防ぐ以外に、簡単にできることはほとんどありません。
クラスローダを使っていくつかのトリックを実行することはできますが、これはまったく新しい複雑さの世界につながる傾向があります。詳しく説明すると、異なるクラスローダーを使用すると、同じクラスを同じ JVM に 2 回 (またはそれ以上) ロードすることができます。したがって、静的変数の独立したコピーを効果的に取得できます。この個別のクラスローダーの使用は、一部の Java EE アプリケーション サーバーで悪用されています。その結果、ライブラリ自体が何らかのリフレクションと動的なクラスローディングを開始したときに、どのクラスローダとクラスパスが使用されるかという問題が生じます。必要性が非常に高い場合を除き、このアプローチはお勧めしません。
好みによると、次のようになります。
1)。アンセーフ コード用のシングル スレッド ワーカーを用意します。マルチスレッド アプリでできるだけ多くの作業を行い、できるだけ Worker にドロップしないようにします。
2)。ワーカーが処理の主要な部分であり、並列実行が本当に必要な場合は、ワーカーを複数の個別のプロセスにプルアウトし、IPC 通信を使用してワークアウトを共有します。これは、JMS キューイング ソリューションがうまく機能するように思えます。
3)。IPCのオーバーヘッドを許容できない場合は、ライブラリに代わるスレッドセーフな代替手段を探すか、作成者に影響力がある場合は、コードの修正を依頼してください。並列処理を増やすのはそれほど難しいことではありません。