Java多線程Callable接口實(shí)現(xiàn)代碼示例
對(duì)于多線程,大家并不陌生,對(duì)于如何創(chuàng)建線程也是輕車熟路,對(duì)于使用new thread和實(shí)現(xiàn)runable接口的方式,不再多說(shuō)。這篇博文我們介紹第三種:實(shí)現(xiàn)Callable接口。
Callable接口
接口定義:
@FunctionalInterface public interface Callable<V> { V call() throws Exception; }
從Callable的定義可以看出:
Callable接口類似于Runnable,兩者都是為那些其實(shí)例可能被另一個(gè)線程執(zhí)行的類設(shè)計(jì)的,方法可以有返回值,并且可以拋出異常。但是Runnable不行。
Callable需要依賴FutureTask,用于接收運(yùn)算結(jié)果。一個(gè)產(chǎn)生結(jié)果,一個(gè)拿到結(jié)果。FutureTask是Future接口的實(shí)現(xiàn)類,也可以用作閉鎖。
簡(jiǎn)單實(shí)例
計(jì)算0到100相加,返回結(jié)果。
public class TestCallable { public static void main(String[] args) { CallableThreadDemo ctd = new CallableThreadDemo(); //1.執(zhí)行Callable方式,需要FutureTask實(shí)現(xiàn)類的支持,用于接收運(yùn)算結(jié)果 FutureTask<Integer> result = new FutureTask<Integer>(ctd); new Thread(result).start(); //2.接收線程運(yùn)算后的結(jié)果 try { Integer sum = result.get(); //FutureTask 可用于閉鎖 System.out.println(sum); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } class CallableThreadDemo implements Callable<Integer>{ @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i <= 100; i++) { sum += i; } return sum; } }
總結(jié)
Callable接口其實(shí)特別簡(jiǎn)單,在多線程環(huán)境中,返回結(jié)果。
希望本文所述對(duì)大家了解多線程及callable接口有所幫助。感興趣的朋友可以繼續(xù)參閱本站:淺談Java面向接口編程、Java編程接口回調(diào)一般用法代碼解析等。感謝大家對(duì)本站的支持!
相關(guān)文章
結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法
這篇文章主要介紹了結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07SpringCloud?eureka(server)微服務(wù)集群搭建過(guò)程
這篇文章主要介紹了微服務(wù)SpringCloud-eureka(server)集群搭建,?項(xiàng)目搭建的主要步驟和配置就是創(chuàng)建項(xiàng)目和引入pom依賴,本文通過(guò)圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07詳解Java中super的幾種用法并與this的區(qū)別
這篇文章主要介紹了Java中super的幾種用法并與this的區(qū)別,有需要的朋友可以參考一下2013-12-12Java中靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)和普通代碼塊的區(qū)別
在Java中,靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)、普通代碼塊的執(zhí)行順序是一個(gè)筆試的考點(diǎn),通過(guò)這篇文章希望大家能徹底了解它們之間的執(zhí)行順序,需要的朋友可以參考下2023-05-05Java虛擬機(jī)裝載和初始化一個(gè)class類代碼解析
這篇文章的主要內(nèi)容是Java虛擬機(jī)裝載和初始化一個(gè)class類的代碼解析,包括介紹了裝載和初始化的時(shí)機(jī)與方式,需要的朋友可以參考下。2017-09-09springboot自動(dòng)裝配TypeNotPresentExceptionProxy異常排查解決
這篇文章主要為大家介紹了springboot自動(dòng)裝配TypeNotPresentExceptionProxy異常排查解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09