这是从 zip 文件中加密条目并将其存储为文件的 java 方法。文件读写没有问题,所以与2-5行无关。问题如下所述...
ExecutorService
对象(es)用于从ZipEntry[]
数组(ze)1by1中获取Zip Entry,并由固定数量的线程同时执行它们。每个线程都使用ScriptEngine
ScriptEngine 数组 (se) 中的一个对象来实现。当一个线程完成其执行时,脚本引擎将为另一个条目腾出空间。问题是对于第一批线程资源(entry),executor没有平均划分entry。因此,发送到单个引擎的条目不止一个,导致死锁
如何在前一个线程之后延迟线程运行几毫秒?
或者
如何在脚本引擎繁忙时对资源进行排队。但我看不到解决方案:
这是代码:
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);
}
}