下面是從zip文件加密條目並將其作爲文件存儲的java方法。文件讀寫沒有問題,所以與第2-5行無關。問題如下所述...腳本引擎的ExecutorService線程間隔差距
ExecutorService
對象用於從ZipEntry[]
數組(ze)1by1獲取Zip條目,並通過固定數量的線程同時執行它們。每個線程都使用ScriptEngine數組(se)中的ScriptEngine
對象實現。當一個線程完成其執行時,腳本引擎將爲另一個條目釋放。問題出在第一批線程資源(入口),執行程序不會均勻分配入口。所以有多個條目發送到一個引擎造成死鎖
如何延遲線程運行幾毫秒後的前一個?
OR
如何排隊的資源時,腳本引擎正忙。但我不能看到了一個解決方案:
下面的代碼:
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()'的代碼。 –
對不起。這是祕密。你可以嘗試自己 – Dagon
getFreeScriptEngine()如何知道腳本引擎是免費的?獲取腳本引擎是否自動將該腳本引擎標記爲「正在使用」? –