日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java callable 详解_Java多线程详解(七)------Callable接口介绍

發(fā)布時間:2025/3/12 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java callable 详解_Java多线程详解(七)------Callable接口介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、與runnable接口對比

1 創(chuàng)建新類MyThread實現runnable接口2 class MyThread implementsRunnable{3 @Override4 public voidrun() {5

6 }7 }8 新類MyThread2實現callable接口9 class MyThread2 implements Callable{10 @Override11 public Integer call() throwsException {12 return 200;13 }14 }15 面試題:callable接口與runnable接口的區(qū)別?16

17 答:(1)是否有返回值18 (2)是否拋異常19 (3)落地方法不一樣,一個是run,一個是call20

21

22

23

二、如何使用

不可行,因為:thread類的構造方法根本沒有Callable

FutureTask ft = new FutureTask(new MyThread());

new Thread(ft, "AA").start();

運行成功后如何獲得返回值?

ft.get();

三、FutureTask

是什么

未來的任務,用它就干一件事,異步調用

main方法就像一個冰糖葫蘆,一個個方法由main串起來。

但解決不了一個問題:正常調用掛起堵塞問題

在主線程中需要執(zhí)行比較耗時的操作時,但又不想阻塞主線程時,可以把這些作業(yè)交給Future對象在后臺完成,

當主線程將來需要時,就可以通過Future對象獲得后臺作業(yè)的計算結果或者執(zhí)行狀態(tài)。

一般FutureTask多用于耗時的計算,主線程可以在完成自己的任務后,再去獲取結果。

僅在計算完成時才能檢索結果;如果計算尚未完成,則阻塞 get 方法。一旦計算完成,

就不能再重新開始或取消計算。get方法而獲取結果只有在計算完成時獲取,否則會一直阻塞直到任務轉入完成狀態(tài),

然后會返回結果或者拋出異常。

只計算一次

get方法放到最后

代碼:

1 packagecom.study.callable;2

3

4 importjava.util.concurrent.Callable;5 importjava.util.concurrent.FutureTask;6 importjava.util.concurrent.TimeUnit;7

8 class MyThread implementsRunnable {9 @Override10 public voidrun() {11 }12 }13

14 class MyThread2 implements Callable{15 @Override16 public Integer call() throwsException {17 System.out.println(Thread.currentThread().getName() + " come in callable");18 return 200;19 }20 }21

22 public classCallableDemo {23 public static void main(String[] args) throwsException {24 //FutureTask futureTask = new FutureTask<>(new MyThread2());25 //new Thread(futureTask,"zhang3").start();//傳入futureTask對象26 //System.out.println(futureTask.get());27 //28 FutureTask ft1 = new FutureTask(() ->{29 System.out.println(Thread.currentThread().getName() + " come in callable");30 TimeUnit.SECONDS.sleep(4);31 return 1024;32 });33 FutureTask ft2 = new FutureTask(() ->{34 System.out.println(Thread.currentThread().getName() + " come in callable");35 TimeUnit.SECONDS.sleep(4);36 return 2048;37 });38 //啟動線程

39 new Thread(ft1, "zhang3").start();40 new Thread(ft2, "li4").start();41

42 System.out.println(ft1.get());43 System.out.println(ft2.get());44

45 /**

46 *47 *48 在主線程中需要執(zhí)行比較耗時的操作時,但又不想阻塞主線程時,可以把這些作業(yè)交給Future對象在后臺完成,49 當主線程將來需要時,就可以通過Future對象獲得后臺作業(yè)的計算結果或者執(zhí)行狀態(tài)。50

51 一般FutureTask多用于耗時的計算,主線程可以在完成自己的任務后,再去獲取結果。52

53 僅在計算完成時才能檢索結果;如果計算尚未完成,則阻塞 get 方法。一旦計算完成,54 就不能再重新開始或取消計算。get方法而獲取結果只有在計算完成時獲取,否則會一直阻塞直到任務轉入完成狀態(tài),55 然后會返回結果或者拋出異常。56

57 只計算一次58 get方法放到最后59 */

60 }61 }

總結

以上是生活随笔為你收集整理的java callable 详解_Java多线程详解(七)------Callable接口介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。