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 結束,可以開啟線程
Callable 有返回值
那么現(xiàn)在就有一個問題,子現(xiàn)場是耗時操作的,他的返回值返回給誰用呢,主線程如何不阻塞的情況下拿到子線程的返回值呢?
我們接下來解釋這個問題
首先,executorService.submit(callable) 中,executor 調用的不是 execute(callable) 而是 submit(callable)
然后配合 future.get() 去取值,這里的取值,是阻塞式的,能保證我們值的可靠性,這是 Java 在 API 層能做到的上限了。
其中,future 提供一種方法讓主線程能夠主動去詢問后臺線程是否執(zhí)行完畢,他就是:future.isDone()
到此這篇關于Java多線程實現(xiàn)之Callable詳解的文章就介紹到這了,更多相關Java多線程Callable內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 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)原理
相關文章
java組件commons-fileupload實現(xiàn)文件上傳
這篇文章主要介紹了java借助commons-fileupload組件實現(xiàn)文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10
springboot中PostMapping正常接收json參數(shù)后返回404問題
這篇文章主要介紹了springboot中PostMapping正常接收json參數(shù)后返回404問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
解決@Autowired報錯Could not autowire. No bea
介紹了在IDEA中使用@Autowired報錯Couldnot autowire. No beans of 'XXX' type found的解決方法,原因是@Autowired在注入service時,由于service接口沒有實現(xiàn)類,而mybatis僅需提供Dao接口,導致@Autowired無法識別2024-12-12
Mybatis?sqlMapConfig.xml中的mappers標簽使用
這篇文章主要介紹了Mybatis?sqlMapConfig.xml中的mappers標簽使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01
Java利用HttpClient模擬POST表單操作應用及注意事項
本文主要介紹JAVA中利用HttpClient模擬POST表單操作,希望對大家有所幫助。2016-04-04

