摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言提供的線程池還有一個那就是任務(wù)調(diào)度線程池它其實是的一個子類理論我們通過查看的源代碼可以發(fā)現(xiàn)的構(gòu)造器都是調(diào)用父類的構(gòu)造器只是它使用的工作隊列是通過名字我們都可以猜到這個是一
引言本人郵箱:
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明網(wǎng)址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經(jīng)全部托管github有需要的同學(xué)自行下載
java 提供的線程池還有一個,那就是任務(wù)調(diào)度線程池ScheduledThreadPoolExecutor,它其實是ThreadPoolExecutor的一個子類.
理論我們通過查看ScheduledThreadPoolExecutor的源代碼,可以發(fā)現(xiàn)ScheduledThreadPoolExecutor的構(gòu)造器都是調(diào)用父類的構(gòu)造器,只是它使用的工作隊列是java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue通過名字我們都可以猜到這個是一個延時工作隊列.
因為ScheduledThreadPoolExecutor的最大線程是Integer.MAX_VALUE,而且根據(jù)源碼可以看到execute和submit其實都是調(diào)用schedule這個方法,而且延時時間都是指定為0,所以調(diào)用execute和submit的任務(wù)都直接被執(zhí)行.
我們搞幾個延時炸彈,讓它們每個5s炸一次
public class TestMain { public static void main(String[] args) throws InterruptedException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ScheduledThreadPoolExecutor pool = new ScheduledThreadPoolExecutor(5); for (int i = 0; i < 5; i ++){ final int temp = i + 1; pool.schedule(() -> { System.out.println("第"+temp+"個炸彈爆炸時間:" + simpleDateFormat.format(new Date())); }, temp * 5, TimeUnit.SECONDS); } pool.shutdown(); System.out.println("end main時間:" + simpleDateFormat.format(new Date())); } }
運(yùn)行結(jié)果:
end main時間:2016-11-03 19:58:31
第1個炸彈爆炸時間:2016-11-03 19:58:36
第2個炸彈爆炸時間:2016-11-03 19:58:41
第3個炸彈爆炸時間:2016-11-03 19:58:46
第4個炸彈爆炸時間:2016-11-03 19:58:51
第5個炸彈爆炸時間:2016-11-03 19:58:56
ok,這個類相對比較簡單,我就不多講了
后記在正在項目中,一般如果需要使用定時任務(wù),不會直接使用這個類的.有一個quartz已經(jīng)把定時任務(wù)封裝的很好了.它是通過cron表示時,可以指定某一個任務(wù)每天執(zhí)行,或者每周三下午5點執(zhí)行.更多的資料可以去查百度.或者等以后有機(jī)會我再整理一寫常用jar用法系列文章.就這樣了.
打賞如果覺得我的文章寫的還過得去的話,有錢就捧個錢場,沒錢給我捧個人場(幫我點贊或推薦一下)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76298.html
摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言提供的線程池還有一個那就是任務(wù)調(diào)度線程池它其實是的一個子類理論我們通過查看的源代碼可以發(fā)現(xiàn)的構(gòu)造器都是調(diào)用父類的構(gòu)造器只是它使用的工作隊列是通過名字我們都可以猜到這個是一 本人郵箱: 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明網(wǎng)址 http://blog.csdn.net/tianshi_kcogithub: https://github...
摘要:線程的啟動與銷毀都與本地線程同步。操作系統(tǒng)會調(diào)度所有線程并將它們分配給可用的。框架的成員主要成員線程池接口接口接口以及工具類。創(chuàng)建單個線程的接口與其實現(xiàn)類用于表示異步計算的結(jié)果。參考書籍并發(fā)編程的藝術(shù)方騰飛魏鵬程曉明著 在java中,直接使用線程來異步的執(zhí)行任務(wù),線程的每次創(chuàng)建與銷毀需要一定的計算機(jī)資源開銷。每個任務(wù)創(chuàng)建一個線程的話,當(dāng)任務(wù)數(shù)量多的時候,則對應(yīng)的創(chuàng)建銷毀開銷會消耗大量...
摘要:深入理解線程池線程池初探所謂線程池,就是將多個線程放在一個池子里面所謂池化技術(shù),然后需要線程的時候不是創(chuàng)建一個線程,而是從線程池里面獲取一個可用的線程,然后執(zhí)行我們的任務(wù)。最后的的意思是需要確保線程池已經(jīng)被啟動起來了。 深入理解Java線程池 線程池初探 ?所謂線程池,就是將多個線程放在一個池子里面(所謂池化技術(shù)),然后需要線程的時候不是創(chuàng)建一個線程,而是從線程池里面獲取一個可用的線程...
摘要:一使用線程池的好處線程池提供了一種限制和管理資源包括執(zhí)行一個任務(wù)。每個線程池還維護(hù)一些基本統(tǒng)計信息,例如已完成任務(wù)的數(shù)量。通過重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。使用無界隊列作為線程池的工作隊列會對線程池帶來的影響與相同。 歷史優(yōu)質(zhì)文章推薦: Java并發(fā)編程指南專欄 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問...
摘要:在前面介紹了的多線程的基本原理信息線程池架構(gòu)原理和源碼解析,本文對這個本身的線程池的調(diào)度器做一個簡單擴(kuò)展,如果還沒讀過上一篇文章,建議讀一下,因為這是調(diào)度器的核心組件部分。 在前面介紹了java的多線程的基本原理信息:《Java線程池架構(gòu)原理和源碼解析》,本文對這個java本身的線程池的調(diào)度器做一個簡單擴(kuò)展,如果還沒讀過上一篇文章,建議讀一下,因為這是調(diào)度器的核心組件部分。 我們?nèi)绻?..
閱讀 1800·2021-11-22 09:34
閱讀 3083·2019-08-30 15:55
閱讀 663·2019-08-30 15:53
閱讀 2054·2019-08-30 15:52
閱讀 3000·2019-08-29 18:32
閱讀 1989·2019-08-29 17:15
閱讀 2392·2019-08-29 13:14
閱讀 3557·2019-08-28 18:05