91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java多線程中Future設計模式怎么用

發布時間:2021-10-28 13:31:24 來源:億速云 閱讀:105 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java多線程中Future設計模式怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Future -> 代表的是未來的一個憑據

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

AsynFuture -> Future具體實現類

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;
    }

    /**
     * 運行完 自動回調
     * 無需進程等待
     */
    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 -> 將你的調用邏輯進行了隔離

public interface FutureTask<T> {

    T call();
}

需要時回調:

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

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

運行:

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

運行完自動回調:

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

關于“Java多線程中Future設計模式怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寿阳县| 常宁市| 册亨县| 禹州市| 滨州市| 密云县| 高邮市| 大关县| 明星| 宜春市| 安宁市| 那曲县| 礼泉县| 类乌齐县| 东光县| 内丘县| 同心县| 塔城市| 新源县| 兴安县| 讷河市| 习水县| 长岛县| 娄烦县| 普格县| 长宁区| 攀枝花市| 长乐市| 鲜城| 含山县| 阿图什市| 鱼台县| 通化县| 饶平县| 行唐县| 罗田县| 资兴市| 新闻| 高碑店市| 甘南县| 江西省|