Java Callable接口實(shí)現(xiàn)細(xì)節(jié)詳解
代碼如下
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * @author lzq * @data 2020/4/30 0030 - 下午 4:02 */ public class Test2 { public static void main(String[] args) throws ExecutionException, InterruptedException { MyThread thread=new MyThread(); FutureTask task = new FutureTask(thread); new Thread(task,"a").start(); new Thread(task,"b").start(); System.out.println(task.get()); } } class MyThread implements Callable<String> { @Override public String call() { System.out.println("實(shí)現(xiàn)callable"); return "得到返回值"; } }
執(zhí)行結(jié)果為:
上面是使用Callable接口簡單實(shí)現(xiàn)多線程,使用這個接口要使用FutrueTask類作為簡單的適配類,因?yàn)門hread構(gòu)造方法只能接受Runnable接口參數(shù),下面源碼中看出FutrueTask的對象為什么也能作為Runnable型參數(shù)傳給Thread構(gòu)造方法
再分析一下結(jié)果,可以看到明明啟動了a,b兩個線程,但是只輸出了一個線程的結(jié)果,這是因?yàn)檫\(yùn)行的結(jié)果會被緩存,使得線程的執(zhí)行效率變高。還有一點(diǎn)就是獲取線程返回值的get方法可能會產(chǎn)生阻塞,一般放在最后或者使用異步通信來處理。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA環(huán)境搭建之MyEclipse10+jdk1.8+tomcat8環(huán)境搭建詳解
本文詳細(xì)講解了MyEclipse10+jdk1.8+tomcat8的JAVA環(huán)境搭建方法,希望能幫助到大家2018-10-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
這篇文章主要給大家介紹了關(guān)于如何利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12解決spring-cloud-config 多服務(wù)共享公共配置的問題
這篇文章主要介紹了解決spring-cloud-config 多服務(wù)共享公共配置的問題,本文通過多種方法給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Mybatis Properties 配置優(yōu)先級詳解
這篇文章主要介紹了Mybatis Properties 配置優(yōu)先級,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07深入研究spring boot集成kafka之spring-kafka底層原理
這篇文章主要深入研究了spring boot集成kafka如何實(shí)現(xiàn)spring-kafka的底層原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Java中String的split切割字符串方法實(shí)例及擴(kuò)展
最近在項(xiàng)目中遇到一個小問題,一個字符串分割成一個數(shù)組,下面這篇文章主要給大家介紹了關(guān)于Java中String的split切割字符串方法的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06