簡體   English   中英

如何減慢 java 中線程的生成速度?

[英]How do I slow down the generation of Threads in java?

我正在生成 20 個線程(它們都應該同時運行)。 但是,它們都是同時創建的,都同時開始運行,這就給整個程序帶來了很大的滯后(這就是滯后,我的電腦不慢)。

所以,我想讓它們在不同的時間創建,例如每 2 秒左右生成一個。 我該怎么做呢? 我嘗試過使用大量的東西,但沒有一個能按照我想要的方式工作。 我已經嘗試使用 boolean 方法在它為真之前不再循環,但這似乎不起作用。 有任何想法嗎?

for (int i = 0; i < 20; i++) {
    Rain r = new Rain();
    r.start();
}

嘗試將線程生成器作為線程運行,然后實現 Thread.sleep(2000)

您可能只創建一個生成器線程,它在生成每個線程之間只休眠 2 秒:

for (int i = 0; i < 20; i++) {
    Rain r = new Rain();
    r.start();
    Thread.sleep(2000);
}

注意:遺漏了 try-catch 個塊

如果您因創建的線程數而遇到延遲,最好的解決方案可能是減少您創建的線程數。

另外,Java 5 引入了執行器服務框架,在 Java 7 中再次改進了 fork/joins,因此在正常情況下您根本不必自己創建線程。 這里是一個頁面的鏈接,對這些概念有很好的解釋。)

我通常不會啟動比我在機器上擁有的內核更多的線程,如下所示:

int availableThreads = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(availableThreads);

// ...Create List<Future<ReturnObject>>
// populate list by calling futures.add(executorService.submit(callable));

executorService.shutdown();

這是因為,只要進程處於計算密集型狀態,當您在每個內核上同時進行計算而不是在單個內核上進行線程切換時,就會獲得最大的線程增益。 當然,當您談論磁盤或網絡密集型進程時,情況會有所不同,但這是一個很好的經驗法則。

我真的不明白為什么它只創建 20 個線程就會滯后,但是如果你想讓它們在不同的時間啟動,你可以睡一覺:

for (int i = 0; i < 20; i++) {
    Rain r = new Rain();
    r.start();
    Thread.sleep(2000);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM