日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java并发教程–线程池

發(fā)布時間:2023/12/3 java 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java并发教程–线程池 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java 1.5中提供的最通用的并發(fā)增強(qiáng)功能之一是引入了可自定義的線程池。 這些線程池使您可以對諸如線程數(shù),線程重用,調(diào)度和線程構(gòu)造之類的東西進(jìn)行大量控制。 讓我們回顧一下。

首先,線程池。 讓我們直接進(jìn)入java.util.concurrent.ExecutorService ,它為我們提供了線程池的基本接口。 所有線程池都允許提交CallableRunnable實例以供將來執(zhí)行。 它們還提供各種池管理方法。

泳池管理

池存在各種管理方法。 您可以使用shutdown()池,該池將拒絕將來的所有提交,但將完全處理進(jìn)程內(nèi)執(zhí)行,甚至還包括尚未開始但在關(guān)閉啟動之前提交的進(jìn)程。 您還可以更積極地執(zhí)行shutdownNow()。 這也將阻止將來提交任何內(nèi)容,但是它具有一些不同的顯著行為。 它不會開始執(zhí)行已提交但尚未開始的任務(wù)。 它們將在返回的列表中。 它還將嘗試停止或更準(zhǔn)確地說是當(dāng)前正在執(zhí)行任務(wù)的Thread.interrupt() 。 這是最大的努力,不能保證成功完成這些任務(wù)。

線程工廠

稍后,我們將進(jìn)入java.util.concurrent.Executors構(gòu)建器類,該類可以創(chuàng)建各種線程池配置,但首先讓我們集中討論使用ThreadFactory。 您將需要利用Executor中ThreadFactory支持,并養(yǎng)成提供自己的習(xí)慣。 默認(rèn)的ThreadFactory將為您提供一個遞增編號的池命名方案,這在日志或其他監(jiān)視中并不是很有用。 對于創(chuàng)建的第一個池,您將獲得名為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; }

僅當(dāng)創(chuàng)建新線程時才調(diào)用ThreadFactory 。 鑒于JDK線程池將盡可能重用線程,因此不能使用此類來管理執(zhí)行的開始。

執(zhí)行器生成器方法

現(xiàn)在回到Executors實用程序構(gòu)建器方法。 他們是:

  • newCachedThreadPool()將為您提供一個線程池,該線程池將在可能的情況下重用線程,并根據(jù)需要創(chuàng)建新線程,而沒有配置的限制。
  • newFixedThreadPool(int nThreads)將為您提供一個線程池,該線程池將僅使用指定數(shù)量的線程,但將接受與提交的任務(wù)一樣多的任務(wù),以便按提交順序運(yùn)行它們。
  • newScheduledThreadPool(int corePoolSize)專門用于按延遲執(zhí)行的周期性計劃來調(diào)度執(zhí)行延遲的線程。 返回的線程池實現(xiàn)ScheduledExecutorService ,該服務(wù)公開了其他調(diào)度方法schedule(Runnable命令,長延遲,TimeUnit單位)scheduleAtFixedRate(Runnable命令,長initialDelay,長周期,TimeUnit單位)scheduleWithFixedDelay(Runnable命令,長initialDelay,長延遲, TimeUnit單位)
  • newSingleThreadExecutor()newSingleThreadScheduledExecutor() 。 這些對可以提交的任務(wù)數(shù)量沒有限制,僅確保一次執(zhí)行單個線程/任務(wù)。

最后,有一些幫助方法可用于從Runnable創(chuàng)建Callable實例。 這使我們進(jìn)入了新創(chuàng)建的結(jié)構(gòu)中,該結(jié)構(gòu)允許線程引發(fā)Exception和返回值,這是我們以前不得不非常痛苦地解決的問題。 在下一篇文章中,我們將考慮這些以及它們?nèi)绾闻c這些線程池一起使用。

參考: Java并發(fā)第3部分–來自我們的JCG合作伙伴的Carfey Software博客上的 線程池 。

相關(guān)文章 :
  • Java并發(fā)教程–信號量
  • Java并發(fā)教程–重入鎖
  • Java并發(fā)教程–可調(diào)用,將來
  • Java并發(fā)教程–阻塞隊列
  • Java并發(fā)教程– CountDownLatch
  • Exchanger和無GC的Java
  • Java Fork / Join進(jìn)行并行編程
  • 使用迭代器時如何避免ConcurrentModificationException
  • 改善Java應(yīng)用程序性能的快速技巧

翻譯自: https://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-thread-pools.html

總結(jié)

以上是生活随笔為你收集整理的Java并发教程–线程池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。