多執行緒使用場景

2021-09-29 03:17:16 字數 2373 閱讀 3309

newcachedthreadpool

建立乙個可根據需要建立新執行緒的執行緒池,但是在以前構造的執行緒可用時將重用它們。對於執行很多短期非同步任務的程式而言,這些執行緒池通常可提高程式效能。呼叫 execute 將重用以前構造的執行緒(如果執行緒可用)。如果現有執行緒沒有可用的,則建立乙個新執行緒並新增到池中。終止並從快取中移除那些已有 60 秒鐘未被使用的執行緒。因此,長時間保持空閒的執行緒池不會使用任何資源。

public static executorservice newcachedthreadpool()

示例**:

public class threadpoolexecutortest catch(interruptedexception  e ) 

cachethreadpool.execute(new runnable()

});}

}}

//輸出結果

第1個執行緒pool-1-thread-1

第2個執行緒pool-1-thread-1

第3個執行緒pool-1-thread-1

第4個執行緒pool-1-thread-1 第5個執行緒pool-1-thread-1

由結果可看出 當執行第二個任務時第乙個任務已經完成,會復用執行第乙個任務的執行緒,而不用每次新建執行緒。

2. newfixedthreadpool

建立乙個指定工作執行緒數量的執行緒池。每當提交乙個任務就建立乙個工作執行緒,如果工作執行緒數量達到執行緒池初始的最大數,則將提交的任務存入到池佇列中。

public static executorservice newfixedthreadpool(int nthreads)

nthreads - 池中的執行緒數

示例**:

public class threadpoolexecutortest   catch(interruptedexception  e ) 

}});}}

}

由於設定最大執行緒數為3,所以在輸出三個數後等待2秒後才繼續輸出。

2. newscheduledthreadpool

建立乙個執行緒池,它可安排在給定延遲後執行命令或者定期地執行。

public static scheduledexecutorservice newscheduledthreadpool(int corepoolsize)

corepoolsize - 池中所儲存的執行緒數,即使執行緒是空閒的也包括在內。

延遲執行示例**:

public class threadpoolexecutortest 

}, 3, timeunit.seconds);

}}

表示延遲3秒執行。

定期執行示例**:

public class threadpoolexecutortest 

},1,3,timeunit.seconds); }

}

表示延遲1秒後每3秒執行一次。

scheduledexecutorservice#scheduleatfixedrate() 指的是「以固定的頻率」執行,period(週期)指的是兩次成功執行之間的時間

比如,scheduleatfixedrate(command, 5, 2, second),第一次開始執行是5s後,假如執行耗時1s,那麼下次開始執行是7s後,再下次開始執行是9s後

而scheduledexecutorservice#schedulewithfixeddelay() 指的是「以固定的延時」執行,delay(延時)指的是一次執行終止和下一次執行開始之間的延遲

還是上例,schedulewithfixeddelay(command, 5, 2, second),第一次開始執行是5s後,假如執行耗時1s,執行完成時間是6s後,那麼下次開始執行是8s後,再下次開始執行是11s後

4.newsinglethreadexecutor

建立乙個使用單個 worker 執行緒的 executor,以無界佇列方式來執行該執行緒。(注意,如果因為在關閉前的執行期間出現失敗而終止了此單個執行緒,那麼如果需要,乙個新執行緒將代替它執行後續的任務)。可保證順序地執行各個任務,並且在任意給定的時間不會有多個執行緒是活動的。與其他等效的 newfixedthreadpool(1)不同,可保證無需重新配置此方法所返回的執行程式即可使用其他的執行緒。

public static executorservice newsinglethreadexecutor()

示例**:

public class threadpoolexecutortest catch(interruptedexception e) 

} });}}

}

C 多執行緒使用場景

任何程式在執行時,至少有乙個主線程。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒?多執行緒是指程式中包含多個執行流,即在乙個程式中可以同時執行多個不同的執行緒來執行不同的任務,也就是說...

多執行緒的應用場景

通俗的解釋一下多執行緒先 多執行緒用於堆積處理,就像乙個大土堆,乙個推土機很慢,那麼10個推土機一起來處理,當然速度就快了,不過由於位置的限制,如果20個推土機,那麼推土機之間會產生相互的避讓,相互摩擦,相互擁擠,反而不如10個處理的好,所以,多執行緒處理,執行緒數要開的恰當,就可以提高效率。多執行...

java多執行緒應用場景

多執行緒是基於乙個程序的多個執行過程。多執行緒貌似是提高了處理機的處理速度。實際是這樣麼?假設我們要做一萬次for迴圈,有十個執行緒,每個執行緒做1000次。那麼多執行緒會比單執行緒執行的快麼。針對單核cpu來說,單執行緒是最快的。因為多執行緒並不是真正意義上的多個一起執行。而是每個程序都在一定時間...