【发布时间】:2012-06-12 03:18:07
【问题描述】:
这是从 zip 文件中加密条目并将其存储为文件的 java 方法。文件读写没有问题,所以与2-5行无关。问题如下所述...
ExecutorService 对象 (es) 用于从 ZipEntry[] 数组 (ze) 1by1 获取 Zip 条目,并由固定数量的线程同时执行它们。每个线程都使用来自 ScriptEngine 数组 (se) 的 ScriptEngine 对象实现。当一个线程完成其执行时,脚本引擎将为另一个条目腾出空间。问题是对于第一批线程资源(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);
}
}
【问题讨论】:
-
请出示
getFreeScriptEngine()的代码。 -
对不起。这是秘密。你可以自己试试
-
getFreeScriptEngine() 如何知道脚本引擎是免费的?获取脚本引擎是否会自动将该脚本引擎标记为“正在使用”?
标签: java multithreading executorservice scriptengine