1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
您正在Runnable向您的ForkJoinPool. 因此,您無(wú)法使用所需的數(shù)組塊對(duì)其進(jìn)行參數(shù)化。
您實(shí)際上應(yīng)該定義一個(gè)擴(kuò)展類(lèi)RecursiveTask<Double>,其構(gòu)造函數(shù)將數(shù)組塊作為參數(shù),并決定是對(duì)整個(gè)數(shù)組進(jìn)行操作還是在數(shù)組太大時(shí)進(jìn)行分叉。
然后使用invoke您的方法ForkJoinPool來(lái)獲取最終計(jì)算的結(jié)果,通過(guò)向其傳遞一個(gè)RecursiveTask<Double>采用整個(gè)數(shù)組的新實(shí)例(任務(wù)將根據(jù)您的標(biāo)準(zhǔn)決定是一次性完成所有操作還是分叉,例如,數(shù)組元素的一半轉(zhuǎn)移到另一個(gè)任務(wù)并稍后加入)。
請(qǐng)注意,這里有些混亂。
事實(shí)上,如果您不需要利用 fork/join 框架而只想異步執(zhí)行操作,那么有很多方法可以在不使用ForkJoinPool.
例如:
Callable<Double> call = () -> {return Arrays.stream(input).sum();};
Future<Double> future = Executors.newSingleThreadExecutor().submit(call);
// when you're ready
Double sum = future.get();
添加回答
舉報(bào)