最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java高并發(fā)ScheduledThreadPoolExecutor與Timer區(qū)別

 更新時間:2022年10月12日 16:05:13   作者:冰河  
這篇文章主要為大家介紹了java高并發(fā)ScheduledThreadPoolExecutor與Timer區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

JDK 1.5開始提供ScheduledThreadPoolExecutor類,ScheduledThreadPoolExecutor類繼承ThreadPoolExecutor類重用線程池實現(xiàn)了任務(wù)的周期性調(diào)度功能。在JDK 1.5之前,實現(xiàn)任務(wù)的周期性調(diào)度主要使用的是Timer類和TimerTask類。本文,就簡單介紹下ScheduledThreadPoolExecutor類與Timer類的區(qū)別,ScheduledThreadPoolExecutor類相比于Timer類來說,究竟有哪些優(yōu)勢,以及二者分別實現(xiàn)任務(wù)調(diào)度的簡單示例。

二者的區(qū)別

線程角度

  • Timer是單線程模式,如果某個TimerTask任務(wù)的執(zhí)行時間比較久,會影響到其他任務(wù)的調(diào)度執(zhí)行。
  • ScheduledThreadPoolExecutor是多線程模式,并且重用線程池,某個ScheduledFutureTask任務(wù)執(zhí)行的時間比較久,不會影響到其他任務(wù)的調(diào)度執(zhí)行。

系統(tǒng)時間敏感度

  • Timer調(diào)度是基于操作系統(tǒng)的絕對時間的,對操作系統(tǒng)的時間敏感,一旦操作系統(tǒng)的時間改變,則Timer的調(diào)度不再精確。
  • ScheduledThreadPoolExecutor調(diào)度是基于相對時間的,不受操作系統(tǒng)時間改變的影響。

是否捕獲異常

  • Timer不會捕獲TimerTask拋出的異常,加上Timer又是單線程的。一旦某個調(diào)度任務(wù)出現(xiàn)異常,則整個線程就會終止,其他需要調(diào)度的任務(wù)也不再執(zhí)行。
  • ScheduledThreadPoolExecutor基于線程池來實現(xiàn)調(diào)度功能,某個任務(wù)拋出異常后,其他任務(wù)仍能正常執(zhí)行。

任務(wù)是否具備優(yōu)先級

  • Timer中執(zhí)行的TimerTask任務(wù)整體上沒有優(yōu)先級的概念,只是按照系統(tǒng)的絕對時間來執(zhí)行任務(wù)。
  • ScheduledThreadPoolExecutor中執(zhí)行的ScheduledFutureTask類實現(xiàn)了java.lang.Comparable接口和java.util.concurrent.Delayed接口,這也就說明了ScheduledFutureTask類中實現(xiàn)了兩個非常重要的方法,一個是java.lang.Comparable接口的compareTo方法,一個是java.util.concurrent.Delayed接口的getDelay方法。在ScheduledFutureTask類中compareTo方法方法實現(xiàn)了任務(wù)的比較,距離下次執(zhí)行的時間間隔短的任務(wù)會排在前面,也就是說,距離下次執(zhí)行的時間間隔短的任務(wù)的優(yōu)先級比較高。而getDelay方法則能夠返回距離下次任務(wù)執(zhí)行的時間間隔。

是否支持對任務(wù)排序

  • Timer不支持對任務(wù)的排序。
  • ScheduledThreadPoolExecutor類中定義了一個靜態(tài)內(nèi)部類DelayedWorkQueue,DelayedWorkQueue類本質(zhì)上是一個有序隊列,為需要調(diào)度的每個任務(wù)按照距離下次執(zhí)行時間間隔的大小來排序

能否獲取返回的結(jié)果

  • Timer中執(zhí)行的TimerTask類只是實現(xiàn)了java.lang.Runnable接口,無法從TimerTask中獲取返回的結(jié)果。
  • ScheduledThreadPoolExecutor中執(zhí)行的ScheduledFutureTask類繼承了FutureTask類,能夠通過Future來獲取返回的結(jié)果。

通過以上對ScheduledThreadPoolExecutor類和Timer類的分析對比,相信在JDK 1.5之后,就沒有使用Timer來實現(xiàn)定時任務(wù)調(diào)度的必要了。

二者簡單的示例

這里,給出使用Timer和ScheduledThreadPoolExecutor實現(xiàn)定時調(diào)度的簡單示例,為了簡便,我這里就直接使用匿名內(nèi)部類的形式來提交任務(wù)。

Timer類簡單示例

源代碼示例如下所示。

package io.binghe.concurrent.lab09;
import java.util.Timer;
import java.util.TimerTask;
/**
 * @author binghe
 * @version 1.0.0
 * @description 測試Timer
 */
public class TimerTest {
    public static void main(String[] args) throws InterruptedException {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println("測試Timer類");
            }
        }, 1000, 1000);
        Thread.sleep(10000);
        timer.cancel();
    }
}

運(yùn)行結(jié)果如下所示。

測試Timer類
測試Timer類
測試Timer類
測試Timer類
測試Timer類
測試Timer類
測試Timer類
測試Timer類
測試Timer類
測試Timer類

ScheduledThreadPoolExecutor類簡單示例

源代碼示例如下所示。

package io.binghe.concurrent.lab09;
import java.util.concurrent.*;
/**
 * @author binghe
 * @version 1.0.0
 * @description 測試ScheduledThreadPoolExecutor
 */
public class ScheduledThreadPoolExecutorTest {
    public static void main(String[] args) throws  InterruptedException {
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                System.out.println("測試測試ScheduledThreadPoolExecutor");
            }
        }, 1, 1, TimeUnit.SECONDS);
        //主線程休眠10秒
        Thread.sleep(10000);
        System.out.println("正在關(guān)閉線程池...");
        // 關(guān)閉線程池
        scheduledExecutorService.shutdown();
        boolean isClosed;
        // 等待線程池終止
        do {
            isClosed = scheduledExecutorService.awaitTermination(1, TimeUnit.DAYS);
            System.out.println("正在等待線程池中的任務(wù)執(zhí)行完成");
        } while(!isClosed);
        System.out.println("所有線程執(zhí)行結(jié)束,線程池關(guān)閉");
    }
}

運(yùn)行結(jié)果如下所示。

測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
測試測試ScheduledThreadPoolExecutor
正在關(guān)閉線程池...
測試測試ScheduledThreadPoolExecutor
正在等待線程池中的任務(wù)執(zhí)行完成
所有線程執(zhí)行結(jié)束,線程池關(guān)閉

注意:關(guān)于Timer和ScheduledThreadPoolExecutor還有其他的使用方法,這里,我就簡單列出以上兩個使用示例,更多的使用方法大家可以自行實現(xiàn)。

以上就是java高并發(fā)ScheduledThreadPoolExecutor與Timer區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于java高并發(fā)ScheduledThreadPoolExecutor Timer的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java導(dǎo)出dbf文件生僻漢字處理方式

    java導(dǎo)出dbf文件生僻漢字處理方式

    這篇文章主要介紹了java導(dǎo)出dbf文件生僻漢字處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java實現(xiàn)簡單的圖書管理系統(tǒng)

    java實現(xiàn)簡單的圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java實現(xiàn)簡單計算器

    java實現(xiàn)簡單計算器

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Spring Boot配置application.yml及根據(jù)application.yml選擇啟動配置的操作方法

    Spring Boot配置application.yml及根據(jù)application.yml選擇啟動配置的操作

    Spring Boot中可以選擇applicant.properties 作為配置文件,也可以通過在application.yml中進(jìn)行配置,讓Spring Boot根據(jù)你的選擇進(jìn)行加載啟動配置文件,本文給大家介紹Spring Boot配置application.yml及根據(jù)application.yml選擇啟動配置的操作方法,感興趣的朋友一起看看吧
    2023-10-10
  • JAVA基礎(chǔ)類庫之String類,StringBuffer類和StringBuilder類

    JAVA基礎(chǔ)類庫之String類,StringBuffer類和StringBuilder類

    這篇文章主要介紹了Java中基礎(chǔ)類庫的String類,StringBuffer類和StringBuilder類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2021-09-09
  • 解決mybatis case when 報錯的問題

    解決mybatis case when 報錯的問題

    這篇文章主要介紹了解決mybatis case when 報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • JAVA中的deflate壓縮實現(xiàn)方法

    JAVA中的deflate壓縮實現(xiàn)方法

    下面小編就為大家?guī)硪黄狫AVA中的deflate壓縮實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Java每隔兩個數(shù)刪掉一個數(shù)問題詳解

    Java每隔兩個數(shù)刪掉一個數(shù)問題詳解

    這篇文章主要介紹了Java每隔兩個數(shù)刪掉一個數(shù)問題詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實現(xiàn)Kruskal算法的示例代碼

    Java實現(xiàn)Kruskal算法的示例代碼

    Kruskal算法是一種用來尋找最小生成樹的算法,由Joseph Kruskal在1956年發(fā)表。用來解決同樣問題的還有Prim算法和Boruvka算法等。本文將介紹用Java語言實現(xiàn)Kruskal算法的示例代碼,需要的可以參考一下
    2022-07-07
  • Java注解Annotation解析

    Java注解Annotation解析

    這篇文章主要為大家詳細(xì)介紹了Java注解Annotation,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論

铁岭县| 宝坻区| 阿合奇县| 木里| 睢宁县| 横山县| 西宁市| 丰镇市| 泽州县| 兴化市| 眉山市| 毕节市| 隆安县| 武城县| 常州市| 手机| 中宁县| 巴中市| 苍山县| 遂川县| 天津市| 福清市| 榕江县| 会昌县| 定兴县| 衡阳市| 虎林市| 铜鼓县| 琼中| 同德县| 襄樊市| 茂名市| 黄山市| 筠连县| 嵊州市| 新龙县| 方城县| 达日县| 昔阳县| 德州市| 和平县|