欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java多線程開發(fā)ScheduledExecutorService簡(jiǎn)化方式

 更新時(shí)間:2022年03月08日 09:22:19   作者:kl  
這篇文章主要為大家介紹了java多線程開發(fā)ScheduledExecutorService的簡(jiǎn)化方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

前言

java開發(fā),多多少少會(huì)接觸到多線程的應(yīng)用開發(fā)場(chǎng)景,博主之前做多線程的時(shí)候就兩種方式,一個(gè)是繼承Thread一個(gè)是實(shí)現(xiàn)Runnable接口,不過用的多的還是實(shí)現(xiàn)Runnable接口,因?yàn)閷?shí)現(xiàn)Runnable接口可以做多線程資源共享!而java.util.concurrent.ScheduledExecutorService接口將大大簡(jiǎn)化多線程應(yīng)用的開發(fā)!也能輕松解決任務(wù)定時(shí)執(zhí)行的問題!

java多線程的應(yīng)用場(chǎng)景

應(yīng)用場(chǎng)景一:

做過微信開發(fā)的都知道,微信的token是有失效時(shí)間的,而且每天獲取token都是有限制的,不能每次需要的時(shí)候取一次,只能快過期的時(shí)候重新去取,這個(gè)時(shí)候我們就可以給取token的這個(gè)操作單獨(dú)開個(gè)線程,每次取完后線程休眠一段繼續(xù)去取,這樣就保證了token永遠(yuǎn)都是有效的 !    

應(yīng)用場(chǎng)景二:

同樣是微信開發(fā)中的問題,微信服務(wù)器連我們服務(wù)器的時(shí)候,必須五秒內(nèi)響應(yīng)結(jié)果,不然微信就直接提示用戶,該服務(wù)不可用了。而我們不可能所有的業(yè)務(wù)都能做到五秒內(nèi)完成并響應(yīng)微信服務(wù)器。比如從微信服務(wù)器上下載用戶提交的文件保存到我們自己的文件服務(wù)器上,(微信服務(wù)器臨時(shí)保存用戶文件),文件的上傳下載都是比較耗時(shí)的操作,我們肯定不能等文件上傳完了在響應(yīng)微信,所有得單獨(dú)開個(gè)線程還執(zhí)行文件的下載上傳操作 

ScheduledExecutorService方法簡(jiǎn)介

/**
     *指定delay時(shí)間后執(zhí)行任務(wù)
     * @param command 執(zhí)行的線程任務(wù) Runnable不能返回執(zhí)行結(jié)果
     * @param delay 指定某個(gè)時(shí)間后執(zhí)行
     * @param unit 指定時(shí)間單位
     * @return
     */
    public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) {
        return null;
    }
    /**
     *指定delay時(shí)間后執(zhí)行任務(wù)
     * @param callable 執(zhí)行的線程任務(wù) Callable返回執(zhí)行結(jié)果
     * @param delay 指定某個(gè)時(shí)間后執(zhí)行
     * @param unit 指定時(shí)間單位
     * @param
     * @return
     */
    publicScheduledFutureschedule(Callablecallable, long delay, TimeUnit unit) {
        return null;
    }
    /**
     *等待initiaDelay時(shí)間后,每個(gè)period時(shí)間執(zhí)行一次
     * @param command
     * @param initialDelay
     * @param period
     * @param unit
     * @return
     */
    public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) {
        return null;
    }
    //scheduleWithFixedDelay和scheduleAtFixedRate差不多
    public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) {
        return null;
    }

實(shí)例

/**
 * @author kl by 2016/5/14
 * @boke www.kailing.pub
 */
public class Test  {
    public static int count=0;
    public static void main(String[] args) {
        //初始化兩個(gè)線城池大小的任務(wù)調(diào)度服務(wù)
        ScheduledExecutorService executorService= Executors.newScheduledThreadPool(2);
        //任務(wù)一:0秒后開始執(zhí)行,之后每秒執(zhí)行一次
        final ScheduledFuture test1= executorService.scheduleAtFixedRate(new Runnable() {
            public void run() {
                System.out.println("任務(wù)一執(zhí)行第"+(count++)+"次   "+Thread.currentThread());
            }
        },0, 1,TimeUnit.SECONDS);

        //任務(wù)二:6秒后開始執(zhí)行,并返回執(zhí)行結(jié)果
       final   ScheduledFuture test2 = executorService.schedule(new Callable() {
            public Object call()  {
                System.out.println("任務(wù)二執(zhí)行,傳遞執(zhí)行結(jié)果給任務(wù)三  "+Thread.currentThread());
                return "任務(wù)二已執(zhí)行完,請(qǐng)知曉!";
            }
        },6,TimeUnit.SECONDS);

        //任務(wù)三:8秒后執(zhí)行,打印任務(wù)二的結(jié)果,終止任務(wù)一
        executorService.schedule(new Runnable() {
            public void run() {
                try {
                    System.out.println(test2.get());
                }catch (Exception e){
                    e.printStackTrace();
                }
                System.out.println("任務(wù)三執(zhí)行,任務(wù)一終止  "+Thread.currentThread());
               test1.cancel(true);
            }
        },8,TimeUnit.SECONDS);

        System.out.println("我是最先執(zhí)行的嗎?不一定,雖然我是主線程  "+Thread.currentThread());
    }
}

ps:因?yàn)槿蝿?wù)三種涉及了任務(wù)二的執(zhí)行結(jié)果,所以即使任務(wù)三的執(zhí)行時(shí)間設(shè)置在任務(wù)二的執(zhí)行前面,任務(wù)三也要等到任務(wù)二執(zhí)行完后才能執(zhí)行 ,這個(gè)可以修改執(zhí)行時(shí)間自己測(cè)試測(cè)試,體會(huì)體會(huì)

實(shí)例結(jié)果

以上就是java多線程開發(fā)ScheduledExecutorService簡(jiǎn)化方式的詳細(xì)內(nèi)容,更多關(guān)于java多線程開發(fā)ScheduledExecutorService簡(jiǎn)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java多線程之讀寫鎖分離設(shè)計(jì)模式

    Java多線程之讀寫鎖分離設(shè)計(jì)模式

    這篇文章主要介紹了Java多線程讀寫鎖分離設(shè)計(jì)模式,主要利用Java到嗎完成read read 并行化、read write 不允許、write write 不允許幾項(xiàng)任務(wù),需要的朋友可以參考一下
    2021-10-10
  • springboot利用AOP完成日志統(tǒng)計(jì)的詳細(xì)步驟

    springboot利用AOP完成日志統(tǒng)計(jì)的詳細(xì)步驟

    項(xiàng)目用到了過濾器,可能有的人會(huì)不理解,之所以用過濾器是因?yàn)橄胍谌罩居涗沺ost請(qǐng)求的json數(shù)據(jù)。本文重點(diǎn)給大家介紹springboot利用AOP完成日志統(tǒng)計(jì)的詳細(xì)步驟,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Java基礎(chǔ)之詳細(xì)總結(jié)五種常用運(yùn)算符

    Java基礎(chǔ)之詳細(xì)總結(jié)五種常用運(yùn)算符

    在通常代碼邏輯處理中,我們常常都會(huì)使用到運(yùn)算符,今天我們就詳細(xì)了解一下運(yùn)算符的使用以及分類.運(yùn)算符是對(duì)常量或者變量進(jìn)行操作的符號(hào),它分為算術(shù)運(yùn)算符,賦值運(yùn)算符,比較運(yùn)算符,邏輯運(yùn)算符以及位運(yùn)算符.需要的朋友可以參考下
    2021-05-05
  • idea關(guān)聯(lián)maven的使用詳解

    idea關(guān)聯(lián)maven的使用詳解

    這篇文章主要介紹了idea關(guān)聯(lián)maven的使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java三種方法將List轉(zhuǎn)換為Map的實(shí)例

    Java三種方法將List轉(zhuǎn)換為Map的實(shí)例

    今天小編就為大家分享一篇關(guān)于Java三種方法將List轉(zhuǎn)換為Map的實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • SpringBoot應(yīng)用線上重啟腳本的命令詳解

    SpringBoot應(yīng)用線上重啟腳本的命令詳解

    這篇文章主要介紹了SpringBoot應(yīng)用線上重啟腳本,通過查找應(yīng)用進(jìn)程PID,殺死應(yīng)用進(jìn)程PID,運(yùn)行啟動(dòng)腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • MyBatis 中 SqlMapConfig 配置文件詳解

    MyBatis 中 SqlMapConfig 配置文件詳解

    這篇文章主要介紹了MyBatis 中 SqlMapConfig 配置文件詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java畢業(yè)設(shè)計(jì)之多用戶宿舍管理系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)之多用戶宿舍管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了基于Java實(shí)現(xiàn)的多用戶宿舍管理系統(tǒng),本文采用了jsp、servlet、jdbc等技術(shù),文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • java正則匹配讀取txt文件提取特定開頭和結(jié)尾的字符串

    java正則匹配讀取txt文件提取特定開頭和結(jié)尾的字符串

    通常我們可以直接通過文件流來讀取txt文件的內(nèi)容,但有時(shí)候也會(huì)遇到問題,下面這篇文章主要給大家介紹了關(guān)于java正則匹配讀取txt文件提取特定開頭和結(jié)尾的字符串的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Spring 跨域配置請(qǐng)求詳解

    Spring 跨域配置請(qǐng)求詳解

    這篇文章主要介紹了Spring 跨域配置請(qǐng)求詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評(píng)論