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

Java異步編程之Callbacks與Futures模型詳解

 更新時(shí)間:2023年03月24日 14:05:11   作者:愛我-中華  
這篇文章主要為大家詳細(xì)介紹了Java異步編程中Callbacks與Futures模型的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、Callbacks模型

該模型的異步方法,在異步任務(wù)完成之后調(diào)用,主線程沒(méi)有異步線程的結(jié)果。經(jīng)典模型如Swing’s EventListener模型(如果不了解可參考html如何實(shí)現(xiàn)button的click方法)

1.1示例

public class CallbackModel implements Callback, Runnable {
    @Override
    public void invoke() {
        System.out.println("這是異步回調(diào)的結(jié)果");
    }
    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + "::異步線程任務(wù)開始");
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName() + "::異步線程任務(wù)結(jié)束");
            invoke();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + "::主線程開始");
        new Thread(new CallbackModel(), "線程一").start();
        System.out.println(Thread.currentThread().getName() + "::主線程結(jié)束");
    }
}
interface Callback {
    void invoke();
}

1.2運(yùn)行結(jié)果

main::主線程開始
main::主線程結(jié)束
線程一::異步線程任務(wù)開始
線程一::異步線程任務(wù)結(jié)束
這是異步回調(diào)的結(jié)果

二、Futures模型

? 該模型的異步方法,立刻返回一個(gè)包裝了結(jié)果的返回值Future,T即是包裝的返回值,但返回值不可立即訪問(wèn)(異步方法為完成),F(xiàn)uture對(duì)象包裝了對(duì)它的訪問(wèn)??梢暂喸儗?duì)象,直到該值可用為止。

2.1用例

public class FutureModel {

    static class FutureTask implements Callable {

        @Override
        public Object call()  {
            try {
                System.out.println(Thread.currentThread().getName() + "::異步線程任務(wù)開始");
                Thread.sleep(4000);
                System.out.println(Thread.currentThread().getName() + "::異步線程任務(wù)結(jié)束");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "1234";
        }
    }


    public static void main(String[] args) {
        ExecutorService pool = Executors.newSingleThreadExecutor();
        Future<String> submit = pool.submit(new FutureTask());
        try {
            System.out.println(Thread.currentThread().getName() + "返回的結(jié)果::" + submit.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }finally {
            pool.shutdown();
        }
    }
}

2.1用例結(jié)果

pool-1-thread-1::異步線程任務(wù)開始
pool-1-thread-1::異步線程任務(wù)結(jié)束
main返回的結(jié)果::1234

三、Future接口

/**
*異步計(jì)算的結(jié)果
*/
public interface Future<V> {

    /**
     * 嘗試取消任務(wù),有可能失敗
     */
    boolean cancel(boolean mayInterruptIfRunning);

    /**
     * 判斷是否取消
     *
     * @return {@code true} if this task was cancelled before it completed
     */
    boolean isCancelled();

    /**
     *  * 判斷是否完成
     *
     * @return {@code true} if this task completed
     */
    boolean isDone();

    /**
     * 等待直至獲取結(jié)果
     */
    V get() throws InterruptedException, ExecutionException;

    /**
     * 等待指定的時(shí)間獲取結(jié)果,否則拋出異常
     */
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

四、小結(jié)

1.兩種模型還是基于java的Runnable接口和Callable接口

2.Runnable接口配合Thread創(chuàng)建線程,通常不關(guān)注返回結(jié)果。

3.Callable接口配合Executors(java提供的線程池管理工具)與Future(封裝返回結(jié)果),常用場(chǎng)景是主線程需要獲取異步的結(jié)果。

到此這篇關(guān)于Java異步編程之Callbacks與Futures模型詳解的文章就介紹到這了,更多相關(guān)Java Callbacks Futures內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java手動(dòng)方式創(chuàng)建枚舉類示例

    Java手動(dòng)方式創(chuàng)建枚舉類示例

    這篇文章主要介紹了Java手動(dòng)方式創(chuàng)建枚舉類,結(jié)合實(shí)例形式分析了java創(chuàng)建枚舉類的方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • springboot如何通過(guò)controller層實(shí)現(xiàn)頁(yè)面切換

    springboot如何通過(guò)controller層實(shí)現(xiàn)頁(yè)面切換

    在Spring Boot中,通過(guò)Controller層實(shí)現(xiàn)頁(yè)面切換背景,Spring Boot的默認(rèn)注解是@RestController,它包含了@Controller和@ResponseBody,@ResponseBody會(huì)將返回值轉(zhuǎn)換為字符串返回,因此無(wú)法實(shí)現(xiàn)頁(yè)面切換,將@RestController換成@Controller
    2024-12-12
  • 詳解spring面向切面aop攔截器

    詳解spring面向切面aop攔截器

    spring中有很多概念和名詞,比如過(guò)濾器、攔截器、aop等。這篇文章主要介紹了詳解spring面向切面aop攔截器,有興趣的可以了解一下。
    2017-03-03
  • 詳解Mybatis中javaType和ofType的區(qū)別

    詳解Mybatis中javaType和ofType的區(qū)別

    本文主要介紹了詳解Mybatis中javaType和ofType的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • mybatis-plus 新增/修改如何實(shí)現(xiàn)自動(dòng)填充指定字段

    mybatis-plus 新增/修改如何實(shí)現(xiàn)自動(dòng)填充指定字段

    這篇文章主要介紹了mybatis-plus 新增/修改實(shí)現(xiàn)自動(dòng)填充指定字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring注解@Scope原理及用法解析

    Spring注解@Scope原理及用法解析

    這篇文章主要介紹了Spring注解@Scope原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • MyBatis簡(jiǎn)介與配置MyBatis+Spring+MySql的方法

    MyBatis簡(jiǎn)介與配置MyBatis+Spring+MySql的方法

    MyBatis 是一個(gè)可以自定義SQL、存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架。這篇文章主要介紹了MyBatis簡(jiǎn)介與配置MyBatis+Spring+MySql的方法,需要的朋友可以參考下
    2017-04-04
  • Java中notify是順序喚醒還是隨機(jī)喚醒的

    Java中notify是順序喚醒還是隨機(jī)喚醒的

    這篇文章主要介紹了Java中notify是順序喚醒還是隨機(jī)喚醒的,有很多人會(huì)認(rèn)為?notify?是隨機(jī)喚醒的,但它真的是隨機(jī)喚醒的嗎?帶著疑問(wèn)一起進(jìn)入文章了解具體的內(nèi)容吧
    2022-05-05
  • spring-boot2.7.8添加swagger的案例詳解

    spring-boot2.7.8添加swagger的案例詳解

    這篇文章主要介紹了spring-boot2.7.8添加swagger的案例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java調(diào)用ChatGPT(基于SpringBoot和Vue)實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API

    Java調(diào)用ChatGPT(基于SpringBoot和Vue)實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API

    這篇文章主要介紹了Java調(diào)用ChatGPT(基于SpringBoot和Vue),實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API(可自定義實(shí)現(xiàn)AI助手),文中代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下
    2023-04-04

最新評(píng)論

清苑县| 嵊泗县| 石柱| 溧阳市| 金门县| 巴彦淖尔市| 黄骅市| 社旗县| 抚顺市| 信阳市| 杭州市| 巍山| 寿光市| 海城市| 韶山市| 绥棱县| 舟曲县| 平泉县| 泗阳县| 兰坪| 五台县| 芜湖县| 沂水县| 伊吾县| 中阳县| 苍南县| 新泰市| 临邑县| 海阳市| 永新县| 青田县| 商洛市| 廊坊市| 万州区| 汕尾市| 乐清市| 阿瓦提县| 观塘区| 禹州市| 克什克腾旗| 临泉县|