Oracle官方並發教程之線程池

杜老師說 2022-01-07 13:55:12 阅读数:812

oracle 官方 教程 程之

原文鏈接譯文鏈接,譯者:Greenster,校對:鄭旭東

在java.util.concurrent包中多數的執行器實現都使用了由工作線程組成的線程池,工作線程獨立於所它所執行的Runnable任務和Callable任務,並且常用來執行多個任務。

使用工作線程可以使創建線程的開銷最小化。在大規模並發應用中,創建大量的Thread對象會占用占用大量系統內存,分配和回收這些對象會產生很大的開銷。

一種最常見的線程池是固定大小的線程池。這種線程池始終有一定數量的線程在運行,如果一個線程由於某種原因終止運行了,線程池會自動創建一個新的線程來代替它。需要執行的任務通過一個內部隊列提交給線程,當沒有更多的工作線程可以用來執行任務時,隊列保存額外的任務。

使用固定大小的線程池一個很重要的好處是可以實現優雅退化。例如一個Web服務器,每一個HTTP請求都是由一個單獨的線程來處理的,如果為每一個HTTP都創建一個新線程,那麼當系統的開銷超出其能力時,會突然地對所有請求都停止響應。如果限制Web服務器可以創建的線程數量,那麼它就不必立即處理所有收到的請求,而是在有能力處理請求時才處理。

創建一個使用線程池的執行器最簡單的方法是調用java.util.concurrent.ExecutorsnewFixedThreadPool方法。Executors類還提供了下列一下方法:

  • newCachedThreadPool方法創建了一個可擴展的線程池。適合用來啟動很多短任務的應用程序。
  • newSingleThreadExecutor方法創建了每次執行一個任務的執行器。
  • 還有一些創建ScheduledExecutorService執行器的方法。

如果上面的方法都不滿足需要,可以嘗試java.util.concurrent.ThreadPoolExecutor或者java.util.concurrent.ScheduledThreadPoolExecutor

原創文章,轉載請注明: 轉載自並發編程網 – ifeve.com本文鏈接地址: Oracle官方並發教程之線程池

FavoriteLoading添加本文到我的收藏
版权声明:本文为[杜老師說]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071355124371.html