Java多線程實現(xiàn)之Callable詳解
Java多線程實現(xiàn)之Callable接口
(1)java.util.concurrent.Callable是一個泛型接口,只有一個call()方法
(2)call()方法拋出異常Exception異常,且返回一個指定的泛型類對象
例1:利用Callable接口創(chuàng)建子線程類:
package com.my.frame; import java.util.concurrent.Callable; public class ThreadCall implements Callable<String> { @Override public String call() throws Exception { // TODO Auto-generated method stub System.out.println("====="); return "9999"; } } package com.my.frame; import java.util.concurrent.FutureTask; public class TestThread { public static void main(String[] args) { FutureTask<String> ft = new FutureTask<>(new ThreadCall()); new Thread(ft).start(); } }
例2:
Callable<String> callable = new Callable<String>() { @Override public String call() throws Exception { try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } return "成功"; } }; ExecutorService executorService = Executors.newCachedThreadPool(); Future<String> future = executorService.submit(callable); String result = null; try { result = future.get(); } catch (ExecutionException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("result:" + result);
Callable 與 Runnable
都是以 able 結(jié)束,可以開啟線程
Callable 有返回值
那么現(xiàn)在就有一個問題,子現(xiàn)場是耗時操作的,他的返回值返回給誰用呢,主線程如何不阻塞的情況下拿到子線程的返回值呢?
我們接下來解釋這個問題
首先,executorService.submit(callable) 中,executor 調(diào)用的不是 execute(callable) 而是 submit(callable)
然后配合 future.get() 去取值,這里的取值,是阻塞式的,能保證我們值的可靠性,這是 Java 在 API 層能做到的上限了。
其中,future 提供一種方法讓主線程能夠主動去詢問后臺線程是否執(zhí)行完畢,他就是:future.isDone()
到此這篇關(guān)于Java多線程實現(xiàn)之Callable詳解的文章就介紹到這了,更多相關(guān)Java多線程Callable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java使用多線程批次查詢大量數(shù)據(jù)(Callable返回數(shù)據(jù))方式
- Java通過Callable實現(xiàn)多線程
- Java多線程中Callable和Future的解讀
- Java中的Callable實現(xiàn)多線程詳解
- Java使用Callable接口實現(xiàn)多線程的實例代碼
- Java中Runnable和Callable分別什么時候使用
- Java中Runnable與Callable接口的區(qū)別詳解
- 詳解Java中Callable和Future的區(qū)別
- Java使用Runnable和Callable實現(xiàn)多線程的區(qū)別詳解
- java面試常問的Runnable和Callable的區(qū)別
- Java并發(fā)教程之Callable和Future接口詳解
- Java中callable的實現(xiàn)原理
相關(guān)文章
Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾)
下面小編就為大家?guī)硪黄狫ava刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾) 。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12springboot發(fā)送郵件功能的實現(xiàn)代碼
發(fā)郵件是一個很常見的功能,在java中實現(xiàn)需要依靠JavaMailSender這個接口,今天通過本文給大家分享springboot發(fā)送郵件功能的實現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧2021-07-07如何使用jakarta.json進行json序列化和反序列化
java里,json框架何其多,常見的有jackson、fastjson、gson等,本文重點介紹如何使用jakarta.json進行json序列化和反序列化,需要的朋友可以參考下,2024-07-07Maven中的dependencyManagement 實例詳解
dependencyManagement的中文意思就是依賴關(guān)系管理,它就是為了能通更好統(tǒng)一管理項目的版本號和各種jar版本號,可以更加方便升級,解決包沖突問題,這篇文章主要介紹了Maven中的dependencyManagement 實例詳解,需要的朋友可以參考下2024-02-02SpringBoot?整合ChatGPT?API項目實戰(zhàn)教程
這篇文章主要介紹了SpringBoot整合ChatGPT API項目實戰(zhàn)教程,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05