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

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

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

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

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

AsynFuture -> Future具體實現(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 {

    /**
     * 需進程等待
     */
    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;
    }

    /**
     * 運行完 自動回調(diào)
     * 無需進程等待
     */
    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)用邏輯進行了隔離

public interface FutureTask<T> {

    T call();
}

需要時回調(diào):

/**
 * Future        -> 代表的是未來的一個憑據(jù)
 * FutureTask    -> 將你的調(diào)用邏輯進行了隔離
 * 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());
    }
}

運行:

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

運行完自動回調(diào):

//**
 * Future        -> 代表的是未來的一個憑據(jù)
 * FutureTask    -> 將你的調(diào)用邏輯進行了隔離
 * 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è)計模式的文章就介紹到這了,更多相關(guān)Java多線程 Future內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot中rabbitmq實現(xiàn)消息可靠性機制詳解

    springboot中rabbitmq實現(xiàn)消息可靠性機制詳解

    這篇文章主要介紹了springboot中rabbitmq實現(xiàn)消息可靠性機制詳解,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn)

    Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn)

    數(shù)據(jù)庫表中應(yīng)該都要有create_time、update_time字段;那么在開發(fā)中,對于這些共有字段的處理應(yīng)該要進行統(tǒng)一,這樣就可以簡化我們的開發(fā)過程。那么本文就對Mybatis-Plus中的字段自動填充進行記錄
    2021-11-11
  • Java網(wǎng)絡(luò)編程之簡易聊天室的實現(xiàn)

    Java網(wǎng)絡(luò)編程之簡易聊天室的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)一個簡易聊天室功能,可以實現(xiàn)運行客戶端和連接服務(wù)器,文中的示例代碼講解詳細,需要的可以了解一下
    2022-10-10
  • Java 中的字符串常量池詳解

    Java 中的字符串常量池詳解

    本文主要介紹Java中的字符串常量池的知識,這里整理了相關(guān)資料及簡單示例代碼幫助大家學(xué)習(xí)理解此部分的知識,有需要的小伙伴可以參考下
    2016-09-09
  • 淺談Java中ArrayList的擴容機制

    淺談Java中ArrayList的擴容機制

    本文主要介紹了淺談Java中ArrayList的擴容機制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • springboot開發(fā)擴展springmvc實現(xiàn)解析

    springboot開發(fā)擴展springmvc實現(xiàn)解析

    這篇文章主要介紹了springboot開發(fā)擴展springmvc實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • java.exe和javaw.exe的區(qū)別及使用方法

    java.exe和javaw.exe的區(qū)別及使用方法

    這篇文章主要介紹了java.exe和javaw.exe的區(qū)別及使用方法,需要的朋友可以參考下
    2014-04-04
  • 詳解Spring Boot配置文件之多環(huán)境配置

    詳解Spring Boot配置文件之多環(huán)境配置

    本篇文章主要介紹了詳解Spring Boot配置文件之多環(huán)境配置 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Feign實現(xiàn)跨服務(wù)文件上傳下載

    Feign實現(xiàn)跨服務(wù)文件上傳下載

    這篇文章主要為大家詳細介紹了Feign實現(xiàn)跨服務(wù)文件上傳下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java實現(xiàn)的AES秘鑰生成算法示例

    java實現(xiàn)的AES秘鑰生成算法示例

    這篇文章主要介紹了java實現(xiàn)的AES秘鑰生成算法,結(jié)合實例形式分析了AES秘鑰生成算法原理與實現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01

最新評論