1. gzyueqian
      13352868059

      Java培訓(xùn):理解Java中的Callable接口和Future接口

      更新時(shí)間: 2022-05-05 10:07:04來(lái)源: 粵嵌教育瀏覽量:9187

        在java中,Runnable 接口僅提供多線程編程的基本功能。它有很多限制。Callable 和 Future 接口解決了許多限制。對(duì)java感興趣的同學(xué)可以參加java培訓(xùn),可以獲得快速有效的學(xué)習(xí)。

        Runnable接口

        Runnable 接口用于指定一個(gè)打算由線程執(zhí)行的類。它有一個(gè)單獨(dú)的無(wú)參數(shù)方法,稱為 run(),它必須被實(shí)現(xiàn)的類覆蓋。這個(gè)接口的核心思想是為那些想要在代碼仍在執(zhí)行中執(zhí)行的對(duì)象提供一個(gè)通用協(xié)議——換句話說(shuō),一個(gè)正在運(yùn)行的代碼段調(diào)用另一段代碼而不被停止或終止(同時(shí)執(zhí)行)。有一個(gè)名為 Thread 的類,它提供相同的功能,但不同之處在于它必須是子類(繼承)才能使用。存在接口和類的原因是為了達(dá)到相同的目標(biāo),這是面向?qū)ο笤O(shè)計(jì)所遵循的建議:除非我們打算通過(guò)操作一個(gè)或多個(gè)類來(lái)改變它的含義,否則不應(yīng)繼承類。它的方法和增強(qiáng)它的屬性。通過(guò)實(shí)現(xiàn) Thread 類的對(duì)應(yīng)接口,稱為 Runnable,我們幾乎可以擺脫擴(kuò)展類(子類化)的重任,同時(shí)在我們的程序中獲得線程實(shí)現(xiàn)的全部好處。Java API 文檔也符合相同的想法:在大多數(shù)情況下,如果你打算覆蓋 run() 方法而不是其他 Thread 方法,則應(yīng)該使用 Runnable 接口。

        請(qǐng)注意,多線程編程是一個(gè)龐大而復(fù)雜的領(lǐng)域。Runnable 接口僅提供基本功能。當(dāng)執(zhí)行長(zhǎng)操作并且應(yīng)用程序希望在執(zhí)行之間進(jìn)行通信時(shí),這會(huì)造成嚴(yán)重的限制。因?yàn)?run 方法不返回值,所以跨執(zhí)行線程進(jìn)行通信的唯一方法是使用共享的可變數(shù)據(jù)。現(xiàn)在,共享數(shù)據(jù)的問(wèn)題是它們必須同步才能在調(diào)用線程之間進(jìn)行讀寫。Callable 接口試圖解決這個(gè)限制。在java培訓(xùn)中,有很多關(guān)于Runnable接口的知識(shí)課程,在專業(yè)老師的教學(xué)指導(dǎo)下,可以很全面地掌握網(wǎng)絡(luò)安全的相關(guān)知識(shí)和技能。

        


        Callable接口

        Callable接口旨在定義一個(gè)返回結(jié)果并可能引發(fā)異常的任務(wù)。它在 java.util.concurrent 包中聲明。此接口還包含一個(gè)單一的、無(wú)參數(shù)的方法,稱為 call (),將被此接口的實(shí)現(xiàn)者覆蓋。該方法與Runnable接口的run()方法類似,只是它返回一個(gè)值,并且可以拋出一個(gè)已檢查的異常。事實(shí)上,整個(gè)想法是 Callable 只不過(guò)是 Runnable,因?yàn)檫@兩個(gè)接口都指定了一個(gè)有可能被另一個(gè)線程執(zhí)行的類,只是它不受 Runnable 的限制。

        因此,Callable 和 Runnable 的使用幾乎是可以互換的,除了我們談到的原因。使用 Callable 的應(yīng)用程序通常與實(shí)現(xiàn) Runnable 或 Callable 接口的其他類同時(shí)運(yùn)行。

          Future 接口

        Future 接口是一個(gè)通用接口,表示從異步計(jì)算返回的值。它包含檢查計(jì)算是否已完成或等待它,檢索結(jié)果的方法。在前面的代碼中,F(xiàn)uture 的 get() 方法阻塞了調(diào)用線程,等待 Callable 完成計(jì)算,然后檢索結(jié)果。該接口還包含取消 Callable 執(zhí)行的方法。但是,一旦計(jì)算完成,就不能取消。

        在這個(gè)接口的眾多實(shí)現(xiàn)中,Java 8 引入的 CompletableFuture 類使我們能夠異步執(zhí)行 Runnable 來(lái)執(zhí)行不返回值的任務(wù),以及返回值的 Supplier 任務(wù)。Supplier 是一個(gè)函數(shù)式接口,它包含一個(gè)單一的、無(wú)參數(shù)的方法,稱為 get(),并返回一個(gè)結(jié)果,如 Callable。CompletableFuture 類具有各種高級(jí)功能,供程序員對(duì) Future 接口進(jìn)行操作。

        結(jié)論

        Callable 接口是對(duì) Java 并發(fā) API 的一個(gè)有趣的補(bǔ)充; 它解決了 Runnable 的問(wèn)題。通過(guò) Callable 創(chuàng)建的線程可以返回一個(gè)值。這是一個(gè)強(qiáng)大的功能,可用于創(chuàng)建一個(gè)多線程程序,該程序可以返回由多個(gè)線程同時(shí)完成的各種部分或全部完成的計(jì)算結(jié)果。此外,線程可以返回它們的狀態(tài)碼,指示其計(jì)算的成功或不成功的計(jì)算。想學(xué)習(xí)java技術(shù)的同學(xué),不妨報(bào)個(gè)Java培訓(xùn)班,有明確清晰的學(xué)習(xí)路線,理論知識(shí)+實(shí)戰(zhàn)操作,可以獲得快速提升。


      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩a级片视频中文字幕 | 中日韩欧美综合一区二区三区 | 一区二区三区在线播放 | 先锋国产资源不卡 | 日韩一区二区在线视频 | 偷拍视频精品一区二区三区 |