java线程池并发_Java并发教程–线程池
java線程池并發
Java 1.5中提供的最通用的并發增強功能之一是引入了可自定義的線程池。 這些線程池使您可以對諸如線程數,線程重用,調度和線程構造之類的東西進行大量控制。 讓我們回顧一下。首先,線程池。 讓我們直接進入java.util.concurrent.ExecutorService ,它為我們提供了線程池的基本接口。 所有線程池都允許提交Callable或Runnable實例以供將來執行。 它們還提供各種池管理方法。
泳池管理
池存在各種管理方法。 您可以使用shutdown()池,該池將拒絕將來的所有提交,但將完全處理進程內執行,甚至還包括尚未開始但在關閉啟動之前提交的進程。 您還可以更積極地執行shutdownNow()。 這也將阻止將來提交任何內容,但是它具有一些不同的顯著行為。 它不會開始執行已提交但尚未開始的任務。 它們將在返回的列表中。 它還將嘗試停止或更準確地說是當前正在執行任務的Thread.interrupt() 。 這是最大的努力,不能保證成功完成這些任務。
線程工廠
稍后,我們將進入java.util.concurrent.Executors構建器類,該類可以創建各種線程池配置,但首先讓我們集中討論使用ThreadFactory。 您需要利用Executor中的ThreadFactory支持,并養成提供自己的習慣。 默認的ThreadFactory將為您提供一個遞增編號的池命名方案,這在日志或其他監視中并不是很有用。 對于創建的第一個池,您將獲得名為pool-1-thread-1 , pool-1-thread-2的線程 ,第二個以pool-2-thread-1開頭的線程 ,等等。通過提供自己的ThreadFactory ,您可以具有名為ReportProcessingThread1和HttpThread1的線程。 這是一個簡單的例子:
private AtomicLong counter = new AtomicLong(); private String name; public Thread newThread(Runnable r) {Thread t = new Thread(r);t.setName(name + counter.incrementAndGet());return t; }僅當創建新線程時才調用ThreadFactory 。 鑒于JDK線程池將盡可能重用線程,因此此類不能用于管理執行的開始。
執行器生成器方法
現在回到Executors實用程序構建器方法。 他們是:
- newCachedThreadPool()將為您提供一個線程池,該線程池將在可能的情況下重用線程,并根據需要創建新線程,而沒有配置的限制。
- newFixedThreadPool(int nThreads)將為您提供一個線程池,該線程池將最多使用指定的線程數,但將接受與提交的任務一樣多的任務,以便按提交順序運行它們。
- newScheduledThreadPool(int corePoolSize)專用于按延遲執行的定期計劃來調度執行延遲的線程。 返回的線程池實現ScheduledExecutorService ,該服務公開了其他調度方法schedule(Runnable命令,長延遲,TimeUnit單位) , scheduleAtFixedRate(Runnable命令,長initialDelay,長周期,TimeUnit單位)和scheduleWithFixedDelay(Runnable命令,長initialDelay,長延遲, TimeUnit單位) 。
- newSingleThreadExecutor()和newSingleThreadScheduledExecutor() 。 這些對可以提交的任務數量沒有限制,僅確保一次執行單個線程/任務。
最后,有一些幫助方法可用于從Runnable創建Callable實例。 這使我們進入了新創建的結構中,該結構允許線程拋出異常并返回值,這在我們之前非常痛苦的解決。 在下一篇文章中,我們將考慮這些以及它們如何與這些線程池一起使用。
參考: Java并發第3部分–來自我們JCG合作伙伴的Carfey Software博客上的 線程池 。
相關文章 :- Java并發教程–信號量
- Java并發教程–重入鎖
- Java并發教程–可調用,將來
- Java并發教程–阻塞隊列
- Java并發教程– CountDownLatch
- Exchanger和無GC的Java
- Java Fork / Join進行并行編程
- 使用迭代器時如何避免ConcurrentModificationException
- 改善Java應用程序性能的快速技巧
翻譯自: https://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-thread-pools.html
java線程池并發
總結
以上是生活随笔為你收集整理的java线程池并发_Java并发教程–线程池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信零钱通收益什么时间可以取出?
- 下一篇: 纪念币怎样预约?