摘要:本人郵箱歡迎轉載轉載請注明網址代碼已經全部托管有需要的同學自行下載引言提供的線程池還有一個那就是任務調度線程池它其實是的一個子類理論我們通過查看的源代碼可以發現的構造器都是調用父類的構造器只是它使用的工作隊列是通過名字我們都可以猜到這個是一
引言本人郵箱:
歡迎轉載,轉載請注明網址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經全部托管github有需要的同學自行下載
java 提供的線程池還有一個,那就是任務調度線程池ScheduledThreadPoolExecutor,它其實是ThreadPoolExecutor的一個子類.
理論我們通過查看ScheduledThreadPoolExecutor的源代碼,可以發現ScheduledThreadPoolExecutor的構造器都是調用父類的構造器,只是它使用的工作隊列是java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue通過名字我們都可以猜到這個是一個延時工作隊列.
因為ScheduledThreadPoolExecutor的最大線程是Integer.MAX_VALUE,而且根據源碼可以看到execute和submit其實都是調用schedule這個方法,而且延時時間都是指定為0,所以調用execute和submit的任務都直接被執行.
我們搞幾個延時炸彈,讓它們每個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())); } }
運行結果:
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,這個類相對比較簡單,我就不多講了
后記在正在項目中,一般如果需要使用定時任務,不會直接使用這個類的.有一個quartz已經把定時任務封裝的很好了.它是通過cron表示時,可以指定某一個任務每天執行,或者每周三下午5點執行.更多的資料可以去查百度.或者等以后有機會我再整理一寫常用jar用法系列文章.就這樣了.
打賞如果覺得我的文章寫的還過得去的話,有錢就捧個錢場,沒錢給我捧個人場(幫我點贊或推薦一下)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69992.html
摘要:本人郵箱歡迎轉載轉載請注明網址代碼已經全部托管有需要的同學自行下載引言提供的線程池還有一個那就是任務調度線程池它其實是的一個子類理論我們通過查看的源代碼可以發現的構造器都是調用父類的構造器只是它使用的工作隊列是通過名字我們都可以猜到這個是一 本人郵箱: 歡迎轉載,轉載請注明網址 http://blog.csdn.net/tianshi_kcogithub: https://github...
摘要:線程的啟動與銷毀都與本地線程同步。操作系統會調度所有線程并將它們分配給可用的。框架的成員主要成員線程池接口接口接口以及工具類。創建單個線程的接口與其實現類用于表示異步計算的結果。參考書籍并發編程的藝術方騰飛魏鵬程曉明著 在java中,直接使用線程來異步的執行任務,線程的每次創建與銷毀需要一定的計算機資源開銷。每個任務創建一個線程的話,當任務數量多的時候,則對應的創建銷毀開銷會消耗大量...
摘要:深入理解線程池線程池初探所謂線程池,就是將多個線程放在一個池子里面所謂池化技術,然后需要線程的時候不是創建一個線程,而是從線程池里面獲取一個可用的線程,然后執行我們的任務。最后的的意思是需要確保線程池已經被啟動起來了。 深入理解Java線程池 線程池初探 ?所謂線程池,就是將多個線程放在一個池子里面(所謂池化技術),然后需要線程的時候不是創建一個線程,而是從線程池里面獲取一個可用的線程...
摘要:一使用線程池的好處線程池提供了一種限制和管理資源包括執行一個任務。每個線程池還維護一些基本統計信息,例如已完成任務的數量。通過重復利用已創建的線程降低線程創建和銷毀造成的消耗。使用無界隊列作為線程池的工作隊列會對線程池帶來的影響與相同。 歷史優質文章推薦: Java并發編程指南專欄 分布式系統的經典基礎理論 可能是最漂亮的Spring事務管理詳解 面試中關于Java虛擬機(jvm)的問...
摘要:在前面介紹了的多線程的基本原理信息線程池架構原理和源碼解析,本文對這個本身的線程池的調度器做一個簡單擴展,如果還沒讀過上一篇文章,建議讀一下,因為這是調度器的核心組件部分。 在前面介紹了java的多線程的基本原理信息:《Java線程池架構原理和源碼解析》,本文對這個java本身的線程池的調度器做一個簡單擴展,如果還沒讀過上一篇文章,建議讀一下,因為這是調度器的核心組件部分。 我們如果...
閱讀 1756·2021-11-24 09:39
閱讀 1686·2021-11-22 15:22
閱讀 1002·2021-09-27 13:36
閱讀 3230·2021-09-24 10:34
閱讀 3329·2021-07-26 23:38
閱讀 2633·2019-08-29 16:44
閱讀 974·2019-08-29 16:39
閱讀 1104·2019-08-29 16:20