zip ファイルからエントリを暗号化し、ファイルとして保存する Java メソッドを次に示します。ファイルの読み書きは問題ないので、2~5行目は関係ありません。問題は以下のとおりです...
ExecutorService
オブジェクト (es) を使用して、ZipEntry[]
配列 (ze) 1by1 から Zip Entry を取得し、それらを一定数のスレッドで同時に実行しました。各スレッドはScriptEngine
、ScriptEngine 配列 (se) からのオブジェクトで実装されます。スレッドが実行を終了すると、スクリプト エンジンは別のエントリのために解放されます。問題は、スレッド リソース (エントリ) の最初のバッチであり、エグゼキュータはエントリを均等に分割しません。そのため、単一のエンジンに複数のエントリが送信され、デッドロックが発生します
前のスレッドから数ミリ秒後にスレッドの実行を遅らせる方法は?
また
スクリプト エンジンがビジー状態のときにリソースをキューに入れる方法。しかし、私はこれに対する解決策を見ることができません:
コードは次のとおりです。
static void encryptzip(ScriptEngine[] sc, String u, String k, ExecutorService es) throws... {
ZipFile zf = new ZipFile(u);
ZipEntry[] ze = getEntries(zf);
byte[][] zb = getArrayOfEntryBytes(zf, ze);
String p = getExtractionPath(u);
for(int i=0;i<ze.length;i++){
encentry ee = new encentry();
ee.bytes = zb[i];
ee.entry = ze[i];
ee.key = k;
ee.path = p;
ee.script = getFreeScriptEngine(sc);
es.execute(ee);
}
}