如何高效的計算1 1000000000之和

2021-10-08 05:15:31 字數 1216 閱讀 4290

簡單的來算,我們可以採用 for while 之類迴圈來計算,下面採用的for迴圈

static void forsum()

long end = system.currenttimemillis();

system.out.println("for求和="+sum+",所花時間為:"+(end-start));

}

我們可以想想怎麼才能更有效率,for是單個執行緒也即是主線程在執行計算,如果多個執行緒同時執行計算呢?速度會不會快些,試試

static void poolsum() catch (interruptedexception e)  catch (executionexception e) 

}static class sumtask extends recursivetask

@override

protected long compute()

return sum;

} else }}

既然多個執行緒可以,那麼多個流平行計算,是不是也可以呢?

static void streamsum()
執行試試,看看執行的效率怎樣?

我們發現好像使用並行流要快一些,其次是多執行緒,最後是單個執行緒,那麼一定是這樣的嗎?不急,往下看

我把 threshold = 50_0000;改動了一下,如下:

static class sumtask extends recursivetask{

private static final int threshold = 500;//閾值

在執行試試:

發現多執行緒計算時間變長了,其實這個和閾值有關,我們可以這樣想,乙個執行緒池的執行緒數是不是有限的,我們一直遞迴下去,不斷建立執行緒,當多出了池子裡的執行緒數,執行的時候就會有執行緒在等待的,而且,這還和 forkjoinpool 的工作特點(工作竊取)有關。比如乙個工作佇列在執行任務,還剩最後乙個任務,此時其他的執行緒來搶任務,就會出現短暫的等待狀態。

有興趣的小夥伴可以去了解一下

高效計算餘數

include using namespace std int main 這麼簡單的 就不要我解釋了吧 說實話,我也是第一次發現這麼求餘數,哪一種高效就不要我解釋了吧。但是我們還是要看一下結果,是不是。很顯然,最後乙個結果不對,那是因為 求法只在求2的n次方餘數時有效 格式k 2 n 1 為什麼?自...

雲計算熱度不減,如何高效掌握雲計算技能

國內雲計算發展現狀 國際資料公司 idc 最新發布的 中國公有雲服務市場 2019第一季度 跟蹤 報告顯示,2019第一季度中國公有雲服務整體市場規模 iaas paas saas 達到24.6億美金,同比增長67.9 其中,iaas市場增速有所減緩,同比增長74.1 paas市場依然保持高增長,增...

如何高效的學習

人的一生都需要不斷的學習,但隨著年齡的增長,可用來學習的時間越來越少,亟需找到高效的學習方法。個人認為要提供自己的學習效率,首先,要找到高質量的學習資料 其次,要掌握學習的7 2 1法則 最後,還需要利用高效的學習工具。一 如何選擇高質量的書籍 1.關注某領域專家們推薦的書籍 2.找過來人 師兄 師...