私は Eclipse プラグイン (ビルダー) に取り組んでおり、スレッドセーフではないライブラリを使用したいと考えています。もちろん、そのライブラリからコードを並行して実行したいと思います。Eclipse プラグインが新しいサブ jvm (クロスプラットフォーム; windows/mac/linux/... バージョンを維持したくない) でコードを実行するための標準的な方法はありますか? この機能のメモリ要件は大きくなります (複数のギガは問題ありません)。
2 に答える
プライベート起動構成を使用することをお勧めします。これは Grails-IDE で広範に行われます。ソースコードを参照することをお勧めします。当社のインフラストラクチャは必要以上のものかもしれませんが、アイデアを得ることができます。
外部プロセスの起動構成を作成して起動するだけです。私たちが何をしているのかを見るのに良い場所はここにあります:
このsyncExec()
メソッドは、特定の grails コマンドと特定のプロジェクトの起動構成を取得し、それをシステム プロセスとリスナー用にカスタマイズします。最後に、コマンドが同期的に起動されます。これは私たちにとってかなりうまく機能します。
スレッド セーフでないライブラリがある場合は、問題を回避するためにライブラリが適切な同期で使用されていることを確認する必要があります。あなたに合うかもしれない 1 つの方法は、そのライブラリのすべての使用が単一のスレッドで行われるようにすることです。あなたの場合、より面倒な別のアプローチは、ライブラリを利用するすべてのメソッドが同期されることです。あなたのようなケースでは、私は常に前者を好んでいます。
ライブラリを必要とするすべての操作を担当する特別なスレッドを作成できます。必要に応じて、すべての呼び出しを非同期または同期にすることができますが、結果を取得するには何らかのコールバック メカニズムを実装する必要があります。これを実現する便利な方法は、Executor
インターフェイスを使用することです。エグゼキュータにプッシュされた順序ですべてのタスクが同じスレッド内で実行されることを保証するエグゼキュータを実装します。のドキュメントにExecutor
は、開始するための良い例があります。その例にメソッドを追加して、同期実行を実行したり、結果を同期的に返す実行メソッドを追加したりすることもできます。Callable
このために、インターフェースも見ることができます。