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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多线程:了解一下ForkJoin、FutureTask、BlockingQueue

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程:了解一下ForkJoin、FutureTask、BlockingQueue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先了解一下這三種類

FutureTask

在介紹 Callable 時我們知道它可以有返回值,返回值通過 Future 進行封裝。FutureTask 實現了 RunnableFuture 接口,該接口繼承自 Runnable 和 Future 接口,這使得 FutureTask 既可以當做一個任務執行,也可以有返回值。

public class FutureTask<V> implements RunnableFuture<V> public interface RunnableFuture<V> extends Runnable, Future<V>

FutureTask 可用于異步獲取執行結果或取消執行任務的場景。當一個計算任務需要執行很長時間,那么就可以用 FutureTask 來封裝這個任務,主線程在完成自己的任務之后再去獲取結果。get()方法會阻塞當前主線程,直到call()結束并返回。

public class FutureTaskExample {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<Integer> futureTask = new FutureTask<Integer>(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {int result = 0;for (int i = 0; i < 100; i++) {Thread.sleep(10);result += i;}return result;}});Thread computeThread = new Thread(futureTask);computeThread.start();Thread otherThread = new Thread(() -> {System.out.println("other task is running...");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}});otherThread.start();System.out.println(futureTask.get());} } other task is running... 4950

BlockingQueue

java.util.concurrent.BlockingQueue 接口有以下阻塞隊列的實現:

  • FIFO 隊列?:LinkedBlockingQueue、ArrayBlockingQueue(固定長度)
  • 優先級隊列?:PriorityBlockingQueue

提供了阻塞的 take() 和 put() 方法:如果隊列為空 take() 將阻塞,直到隊列中有內容;如果隊列為滿 put() 將阻塞,直到隊列有空閑位置。

使用 BlockingQueue 實現生產者消費者問題

public class ProducerConsumer {private static BlockingQueue<String> queue = new ArrayBlockingQueue<>(5);private static class Producer extends Thread {@Overridepublic void run() {try {queue.put("product");} catch (InterruptedException e) {e.printStackTrace();}System.out.print("produce..");}}private static class Consumer extends Thread {@Overridepublic void run() {try {String product = queue.take();} catch (InterruptedException e) {e.printStackTrace();}System.out.print("consume..");}} } public static void main(String[] args) {for (int i = 0; i < 2; i++) {Producer producer = new Producer();producer.start();}for (int i = 0; i < 5; i++) {Consumer consumer = new Consumer();consumer.start();}for (int i = 0; i < 3; i++) {Producer producer = new Producer();producer.start();} } produce..produce..consume..consume..produce..consume..produce..consume..produce..consume..

ForkJoin

主要用于并行計算中,和 MapReduce 原理類似,都是把大的計算任務拆分成多個小任務并行計算。

public class ForkJoinExample extends RecursiveTask<Integer> {private final int threshold = 5;private int first;private int last;public ForkJoinExample(int first, int last) {this.first = first;this.last = last;}@Overrideprotected Integer compute() {int result = 0;if (last - first <= threshold) {// 任務足夠小則直接計算for (int i = first; i <= last; i++) {result += i;}} else {// 拆分成小任務int middle = first + (last - first) / 2;ForkJoinExample leftTask = new ForkJoinExample(first, middle);ForkJoinExample rightTask = new ForkJoinExample(middle + 1, last);leftTask.fork();rightTask.fork();result = leftTask.join() + rightTask.join();}return result;} } public static void main(String[] args) throws ExecutionException, InterruptedException {ForkJoinExample example = new ForkJoinExample(1, 10000);ForkJoinPool forkJoinPool = new ForkJoinPool();Future result = forkJoinPool.submit(example);System.out.println(result.get()); }

ForkJoin 使用 ForkJoinPool 來啟動,它是一個特殊的線程池,線程數量取決于 CPU 核數。

public class ForkJoinPool extends AbstractExecutorService

ForkJoinPool 實現了工作竊取算法來提高 CPU 的利用率。每個線程都維護了一個雙端隊列,用來存儲需要執行的任務。工作竊取算法允許空閑的線程從其它線程的雙端隊列中竊取一個任務來執行。竊取的任務必須是最晚的任務,避免和隊列所屬線程發生競爭。例如下圖中,Thread2 從 Thread1 的隊列中拿出最晚的 Task1 任務,Thread1 會拿出 Task2 來執行,這樣就避免發生競爭。但是如果隊列中只有一個任務時還是會發生競爭。

總結

以上是生活随笔為你收集整理的多线程:了解一下ForkJoin、FutureTask、BlockingQueue的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美乱妇一区二区三区 | 福利影院av | 一本—道久久a久久精品蜜桃 | 动漫美女无遮挡免费 | 国产精品亚洲视频 | 国产精品传媒麻豆hd | 熟妇人妻av无码一区二区三区 | 欧美日本色 | 精品人妻在线视频 | 韩国甜性涩爱 | 亚洲影音| 黄色.com| 国产一区二区三区视频播放 | 亚洲最新在线视频 | 天天射天天搞 | 午夜精品久久 | 人妻互换 综合 | 亚洲一区在线免费 | 青青视频在线免费观看 | 国产va在线 | 就去色av | 女人特黄大aaaaaa大片 | 男男毛片 | 三级4级全黄60分钟 成人自拍视频 | 欧美熟妇激情一区二区三区 | 无码人妻av一区二区三区波多野 | 国产毛片一区二区三区va在线 | xxx性日本| 91成人在线| 熟妇高潮喷沈阳45熟妇高潮喷 | 久久99热精品 | 四虎国产精品永久免费观看视频 | 国产日比视频 | 国产二区精品 | 美国免费黄色片 | 色婷婷久久久亚洲一区二区三区 | eeuss国产一区二区三区黑人 | 日本 在线 | www.一区二区三区四区 | 黄色录像毛片 | 久久成年 | 99久热 | 噜噜视频 | 天天射网 | 天堂网在线观看视频 | 国产色无码精品视频国产 | 农村妇女愉情三级 | 丰满女邻居的色诱4hd | 香蕉视频日本 | 又黄又色又爽 | 一级做a爱片久久毛片 | 2019中文字幕在线观看 | 欧美三日本三级少妇99 | 午夜激情视频网站 | 欧美乱日| 青娱乐久久 | 成人久久久精品国产乱码一区二区 | 免费成人高清在线视频 | 97爱爱爱 | 免费污视频 | 毛片资源| 奇米在线播放 | 97免费超碰 | 黄色com | 五月天色小说 | 伊人婷婷色 | 在线免费av观看 | 日韩中文字幕二区 | 日本91网站 | 国产精品成人自拍 | 国产精品区一区二 | 国产精品久久久久久久9999 | 国产无遮挡免费视频 | 在线视频激情小说 | 尤物国产 | 福利视频99 | 国产123区在线观看 91国产一区二区 | 亚洲精品三级 | 欧美日韩亚洲在线观看 | 久久精品国产亚洲av香蕉 | 麻豆国产尤物av尤物在线观看 | 亚洲视频四区 | 新久草视频 | 男人私人影院 | 精品美女视频 | 超碰狠狠干 | 国产一区二区色 | 国产成人啪一区二区 | 国产又爽又猛又粗的视频a片 | www嫩草| 夜夜操夜夜干 | www.欧美在线观看 | 国产黄色小视频在线观看 | www.4虎 | 91黄色免费视频 | 99蜜桃臀久久久欧美精品网站 | 亚洲开心网| 国产网站久久 | 欧美第一网站 |