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