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

Java多線程之Future設(shè)計(jì)模式

 更新時(shí)間:2021年10月28日 11:29:59   作者:冬日毛毛雨  
這篇文章主要介紹了Java多線程之Future設(shè)計(jì)模式,F(xiàn)uture 代表的是未來的一個(gè)憑據(jù),文章主要附上Future具體實(shí)現(xiàn)類、橋接Future和FutureTask的代碼,需要的朋友可以參考一下

Future -> 代表的是未來的一個(gè)憑據(jù)

public interface Future<T> {
    T get() throws InterruptedException;
}

AsynFuture -> Future具體實(shí)現(xiàn)類

public class AsynFuture<T> implements Future<T> {

    private volatile boolean done = false;

    private T result;

    public void done(T result){
        synchronized (this){
            this.result = result;
            this.done = true;
            this.notifyAll();
        }
    }
    /**
     * 輪詢 沒有完成等待
     */
    @Override
    public T get() throws InterruptedException {
        synchronized (this) {
            while (!done) {
                this.wait();
            }
        }
        return result;
    }
}

FutureService -> 橋接Future和FutureTask

public class FutureService {

    /**
     * 需進(jìn)程等待
     */
    public <T> Future<T> submit(final FutureTask<T> task) {

        AsynFuture<T> asynFuture = new AsynFuture<>();

        new Thread(() -> {

            T result = task.call();
            asynFuture.done(result);

        }).start();
        return asynFuture;
    }

    /**
     * 運(yùn)行完 自動(dòng)回調(diào)
     * 無需進(jìn)程等待
     */
    public <T> Future<T> submit(final FutureTask<T> task, final Consumer<T> consumer) {

        AsynFuture<T> asynFuture = new AsynFuture<>();
        new Thread(() -> {
            T result = task.call();
            asynFuture.done(result);
            consumer.accept(result);
        }).start();
        return asynFuture;
    }
}

FutureTask -> 將你的調(diào)用邏輯進(jìn)行了隔離

public interface FutureTask<T> {

    T call();
}

需要時(shí)回調(diào):

/**
 * Future        -> 代表的是未來的一個(gè)憑據(jù)
 * FutureTask    -> 將你的調(diào)用邏輯進(jìn)行了隔離
 * FutureService -> 橋接Future和FutureTask
 */
public class SyncInvoker {

    public static void main(String[] args) throws InterruptedException {

        FutureService futureService = new FutureService();
        Future<String> future = futureService.submit(() -> {
            try {
                Thread.sleep(10001);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "FINISH";
        });

        System.out.println("==============");
        System.out.println("do other thing.");
        Thread.sleep(1000);

        System.out.println("==============");

        /**
         * 調(diào)用也形成了阻塞
         */
        System.out.println(future.get());
    }
}

運(yùn)行:

==============
do other thing.
==============
FINISH

運(yùn)行完自動(dòng)回調(diào):

//**
 * Future        -> 代表的是未來的一個(gè)憑據(jù)
 * FutureTask    -> 將你的調(diào)用邏輯進(jìn)行了隔離
 * FutureService -> 橋接Future和FutureTask
 */
public class SyncInvoker {

    public static void main(String[] args) throws InterruptedException {

        FutureService futureService = new FutureService();
        futureService.submit(() -> {
            try {
                Thread.sleep(10001);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "FINISH";
        },System.out::println);

        System.out.println("==============");
        System.out.println("do other thing.");
        Thread.sleep(1000);
        System.out.println("==============");
    }
}

到此這篇關(guān)于Java多線程之Future設(shè)計(jì)模式的文章就介紹到這了,更多相關(guān)Java多線程 Future內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA生成pdf文件的實(shí)操教程

    JAVA生成pdf文件的實(shí)操教程

    PDF是可移植文檔格式,是一種電子文件格式,具有許多其他電子文檔格式無法相比的優(yōu)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于JAVA生成pdf文件的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • springboot項(xiàng)目以jar包運(yùn)行的操作方法

    springboot項(xiàng)目以jar包運(yùn)行的操作方法

    公司一個(gè)springboot項(xiàng)目本來是打war包的,突然要改為打jar包,不知所措了,糾結(jié)該如何操作呢,折騰半天終于搞定了,下面把解決方案分享給大家,對(duì)springboot打jar包方式感興趣的朋友一起看看吧
    2021-06-06
  • Java中的ReadWriteLock高效處理并發(fā)讀寫操作實(shí)例探究

    Java中的ReadWriteLock高效處理并發(fā)讀寫操作實(shí)例探究

    這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫操作實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • MyBatis 執(zhí)行動(dòng)態(tài) SQL語句詳解

    MyBatis 執(zhí)行動(dòng)態(tài) SQL語句詳解

    大家對(duì)mybatis執(zhí)行任意sql語句都了解,那么MyBatis執(zhí)行動(dòng)態(tài)SQL語句呢?下面腳本之家小編給大家解答下mybatis執(zhí)行動(dòng)態(tài)sql語句的方法,非常不錯(cuò),感興趣的朋友參考下吧
    2016-08-08
  • Spring實(shí)戰(zhàn)之容器中的工程Bean用法示例

    Spring實(shí)戰(zhàn)之容器中的工程Bean用法示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之容器中的工程Bean用法,結(jié)合實(shí)例形式分析了Sring框架容器中的工程Bean相關(guān)配置、使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java中的泛型

    Java中的泛型

    這篇文章主要介紹為何要泛型,如何使用泛型,自定義泛型的方法,泛型類的子類等多方面介紹了JAVA中的泛型,需要的小伙伴請(qǐng)看下文
    2021-08-08
  • 關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x詳細(xì)指南

    關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x詳細(xì)指南

    這篇文章主要介紹了關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x的相關(guān)資料,還討論了JPA包路徑從javax改為jakarta,以及Spring?Boot版本升級(jí)和Redis配置調(diào)整等,需要的朋友可以參考下
    2025-01-01
  • java中Date類和Strng類的靈活轉(zhuǎn)化

    java中Date類和Strng類的靈活轉(zhuǎn)化

    這篇文章主要介紹了java中Date類和Strng類的靈活轉(zhuǎn)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟

    用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟

    這篇文章主要介紹了用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 如何自定義Jackson序列化?@JsonSerialize

    如何自定義Jackson序列化?@JsonSerialize

    這篇文章主要介紹了如何自定義Jackson序列化?@JsonSerialize,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論

万源市| 沅江市| 萨嘎县| 酉阳| 金川县| 青浦区| 拉孜县| 荆州市| 石景山区| 修文县| 专栏| 嘉兴市| 定日县| 景泰县| 中西区| 洪泽县| 泗水县| 鹤庆县| 南开区| 延寿县| 弋阳县| 澄迈县| 尼勒克县| 高要市| 静海县| 冀州市| 南宫市| 太仆寺旗| 湘乡市| 永福县| 滦平县| 邢台县| 青海省| 靖远县| 金沙县| 治县。| 乌兰察布市| 宜城市| 绥滨县| 孟村| 黄龙县|