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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用Callable和FutureTask

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用Callable和FutureTask 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

從Java 1.5開始,在java.util.concurrent下有了新的對象集。 該程序包具有許多不同的類,包括線程隊列。 當我用Java 1.2編程時,我本可以使用那些! 當我開始看這些新玩具時,我變得猶豫不決。 這是什么可調用的東西,未來是什么? 事實證明,未來和可贖回沒有錯。 實際上,它們是我在Java生涯中一直期望的。

可調用和可運行之間的區別

可調用是Runnable希望成為的。 Callable的唯一方法是“ T call()”。 使它如此整潔的原因是它返回了一些東西。 這是必須為任務的答案創建吸氣劑的步驟。 雖然這很酷,但仍需要一種獲取返回值的方法。

未來在這里

當Callable完成時,Future有一種獲取價值的方法。 該函數是get()或get(長超時,TimeUnit單位)。 這等效于調用thread.join();。 同時運行runnable.getValue()。

我創建了一個名為CounterCallable的類。 它所做的只是從變量開始到變量結束加數字。

可贖回

package org.mathison.futurecallable;import java.util.concurrent.Callable;/**** @author Daryl*/ public class CounterCallable implements Callable {private long start;private long end;public CounterCallable(long start, long end) {this.start = start;this.end = end;}@Overridepublic SumTimeAnswer call() throws Exception {long sum = 0;long startTime = System.currentTimeMillis();for(long i = start; i <= end; i++){sum += i;}long endTime = System.currentTimeMillis();return new SumTimeAnswer(sum, endTime - startTime);} }

SumTimeAnswer

SumTimeAnswer類實際上是一個簡單的getter類,它保存執行操作所需的時間總和。

package org.mathison.futurecallable;/**** @author Daryl*/ public class SumTimeAnswer {private long timeToFinish;private long sum;public SumTimeAnswer(long sum, long timeToFinish) {this.sum = sum;this.timeToFinish = timeToFinish;}public long getTimeToFinish() {return timeToFinish;}public long getSum() {return sum;} }

應用程式

應用程序只是將所有內容匯集在一起??的主要課程

package org.mathison.futurecallable;import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask;/*** Hello world!**/ public class App {public static final long BEGIN = 0;public static final long END = 100000;public static void main( String[] args ){FutureTask task = new FutureTask(new CounterCallable(BEGIN, END));FutureTask firstHalf = new FutureTask(new CounterCallable(BEGIN, END/2));FutureTask secondHalf = new FutureTask(new CounterCallable(END/2 + 1, END));ExecutorService pool = Executors.newSingleThreadExecutor();pool.submit(task);pool.submit(firstHalf);pool.submit(secondHalf);try {SumTimeAnswer taskAnswer = task.get();System.out.println("just one thread Time: " + taskAnswer.getTimeToFinish()+ " Total: " + taskAnswer.getSum());SumTimeAnswer taskFirstAnswer = firstHalf.get();SumTimeAnswer taskSecondAnswer = secondHalf.get();long totalTime = taskFirstAnswer.getTimeToFinish() + taskSecondAnswer.getTimeToFinish();long totalSum = taskFirstAnswer.getSum() + taskSecondAnswer.getSum();System.out.println("Two thread time: " + totalTime + " Total: " + totalSum);} catch(CancellationException | InterruptedException | ExecutionException e) {e.printStackTrace();}pool.shutdown();} }

結論

在本文中,使用Callable和FutureTask類來演示如何使用java.util.concurrent包。

翻譯自: https://www.javacodegeeks.com/2014/10/how-to-use-callable-and-futuretask.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的如何使用Callable和FutureTask的全部內容,希望文章能夠幫你解決所遇到的問題。

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