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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[并发编程]并发编程第二篇:利用并发编程,实现计算大量数据的和

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [并发编程]并发编程第二篇:利用并发编程,实现计算大量数据的和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用并發編程,實現計算大量數據的和

實現代碼:

package tj.pojo.generate.main;import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask;public class ConcurrentCalculator {private ExecutorService exec;private int cpuCoreNumber;private List<Future<Long>> tasks = new ArrayList<Future<Long>>();// 內部類class SumCalculator implements Callable<Long> {private int[] numbers;private int start;private int end;public SumCalculator(final int[] numbers, int start, int end) {this.numbers = numbers;this.start = start;this.end = end;}@Overridepublic Long call() throws Exception {Long sum = 0L;for (int i = start; i < end; i++) {sum += numbers[i];}System.out.println(String.format("%s~%s的和為%s", start, end, sum));return sum;}}public ConcurrentCalculator() {cpuCoreNumber = Runtime.getRuntime().availableProcessors();System.out.println("CPU核心數:" + cpuCoreNumber);exec = Executors.newFixedThreadPool(cpuCoreNumber);}public Long sum(final int[] numbers) {for (int i = 0; i < cpuCoreNumber; i++) {int increment = numbers.length / cpuCoreNumber + 1;int start = increment * i;int end = start + increment;if (end > numbers.length) {end = numbers.length;}SumCalculator task = new SumCalculator(numbers, start, end);FutureTask<Long> future = new FutureTask<Long>(task);tasks.add(future);System.out.println("添加一個任務,總任務數為:" + tasks.size());if (!exec.isShutdown()) {exec.submit(future);// ExecutoreService提供了submit()方法,傳遞一個Callable,或Runnable,返回Future。// exec.submit(task); }}System.out.println("任務分配完成,總任務數為:" + tasks.size());return getResult();}public Long getResult() {Long sums = 0L;for (Future<Long> task : tasks) {try {Long sum = task.get();sums += sum;System.out.println("當前總合計:" + sums);} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}return sums;}public void close() {exec.shutdown();} }

其中,在代碼的第62行~第64行,由于不了解ExecutoreService.submit(Runnable task)方法的功能。

同時FutureTask<Long> future和SumCalculator task都實現了Runnable接口,造成代碼調用時,進程一直不結束。

傳遞了FutureTask<Long> future才正確執行。

exec.submit(future);// ExecutoreService提供了submit()方法,傳遞一個Callable,或Runnable,返回Future。// exec.submit(task);

測試方法:

public static void test() {int[] numbers = new int[100];for (int i = 0; i < 100; i++) {numbers[i] = i + 1;}tj.pojo.generate.main.ConcurrentCalculator cc = new tj.pojo.generate.main.ConcurrentCalculator();Long sum = cc.sum(numbers);System.out.println("1~100的和為" + sum);cc.close();}

?

FutureTask的實現代碼:

public class FutureTask<V> implements RunnableFuture<V>

FutureTask類實現了RunnableFuture接口,RunnableFuture接口的實現代碼:

public interface RunnableFuture<V> extends Runnable, Future<V> {

??? void run();

}

可以看出RunnableFuture繼承了Runnable接口和Future接口,而FutureTask實現了RunnableFuture接口。

所以它既可以作為Runnable被線程執行,又可以作為Future得到Callable的返回值。

事實上,FutureTask是Future接口的一個唯一實現類。

并發編程的兩種實現形式:

1):使用Callable+Future獲取執行結果

public class Test {public static void main(String[] args) {ExecutorService executor = Executors.newCachedThreadPool();Task task = new Task();Future<Integer> result = executor.submit(task);executor.shutdown();try {Thread.sleep(1000);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.println("主線程在執行任務");try {System.out.println("task運行結果"+result.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}System.out.println("所有任務執行完畢");} } class Task implements Callable<Integer>{@Overridepublic Integer call() throws Exception {System.out.println("子線程在進行計算");Thread.sleep(3000);int sum = 0;for(int i=0;i<100;i++)sum += i;return sum;} }

2):使用Callable+FutureTask獲取執行結果

public class Test {public static void main(String[] args) {//第一種方式ExecutorService executor = Executors.newCachedThreadPool();Task task = new Task();FutureTask<Integer> futureTask = new FutureTask<Integer>(task);executor.submit(futureTask);executor.shutdown();//第二種方式,注意這種方式和第一種方式效果是類似的,只不過一個使用的是ExecutorService,一個使用的是Thread/*Task task = new Task();FutureTask<Integer> futureTask = new FutureTask<Integer>(task);Thread thread = new Thread(futureTask);thread.start();*/try {Thread.sleep(1000);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.println("主線程在執行任務");try {System.out.println("task運行結果"+futureTask.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}System.out.println("所有任務執行完畢");} } class Task implements Callable<Integer>{@Overridepublic Integer call() throws Exception {System.out.println("子線程在進行計算");Thread.sleep(3000);int sum = 0;for(int i=0;i<100;i++)sum += i;return sum;} }

?

轉載于:https://www.cnblogs.com/Candies/p/5692389.html

總結

以上是生活随笔為你收集整理的[并发编程]并发编程第二篇:利用并发编程,实现计算大量数据的和的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中国一级免费毛片 | 久久久一级片 | 操亚洲女人 | 国产精品乱码妇女bbbb | 欧美色精品 | 四虎激情| 日本xxxx裸体xxxx出水 | 欧美区一区 | 亚洲一区二区色 | 欧美日韩激情视频 | 能看的毛片 | 岛国精品一区二区三区 | 国产老熟妇精品观看 | 伊人久久久久久久久久久久 | 91精品国产91久久久久福利 | 一区二区三区高清在线观看 | 欧美嫩草 | 亚洲电影一区二区三区 | 欧美日韩精品二区 | 粉嫩小泬无遮挡久久久久久 | 女人高潮娇喘1分47秒 | 国产精品伦一区二区三区免费看 | 免费看裸体视频网站 | 欧美v日韩 | 美女隐私无遮挡免费 | 草莓巧克力香氛动漫的观看方法 | 97精品熟女少妇一区二区三区 | 成人做爰黄 | 国产精品88av | 欧美色图亚洲自拍 | 欧美午夜精品一区 | 无码任你躁久久久久久久 | 成人深夜福利视频 | 中文字幕在线免费观看 | 午夜特级毛片 | 女同视频网站 | 国产精品免费av一区二区 | 国产在线观看黄色 | 成人免费观看av | 久久久久青草 | 国产一区二区三区在线 | 中国女人黄色大片 | 尤物在线视频观看 | 丁香花电影免费播放电影 | 老司机深夜免费福利 | 人妻换人妻仑乱 | 日韩伦理在线视频 | 亚洲国产成人一区二区精品区 | 久久人| 欧美亚洲综合另类 | 在线五月天 | 亚洲人成无码网站久久99热国产 | 成a人片亚洲日本久久 | 大肉大捧一进一出好爽动态图 | 国产福利片一区二区 | 成人h动漫在线 | 午夜神马福利 | 久久久老司机 | 欧美日韩一区二区三区四区 | av解说在线观看 | 国产成人av一区二区 | wwwav在线 | 国产裸体视频网站 | 国产伦子伦对白视频 | av成人免费在线 | 素人女裸体| 特级av| 免费观看黄色网址 | 国产亚洲精品成人av久久ww | 好吊操视频这里只有精品 | 亚洲一区二区色图 | 致命魔术电影高清在线观看 | 亚洲欧美偷拍一区 | 欧美丰满熟妇xxxx | 公侵犯一区二区三区四区中文字幕 | 999久久久 | 色呦呦 | 日韩最新av | 亚洲视频一二 | 欧美yyy | 亚洲视频二区 | 天天舔天天爽 | 日本成人黄色 | 能在线观看的av网站 | 麻豆传媒一区二区三区 | 精品久久久久久久免费人妻 | 欧美一级不卡视频 | 麻豆一区二区在线观看 | 污片网站在线观看 | 五月色婷 | 伊人国产在线 | 精品国产伦一区 | 911香蕉 | 灌满闺乖女h高h调教尿h | 超碰在线天天 | 日本夜夜操 | 福利在线网站 | 永久免费汤不热视频 | 91在线国产观看 |