日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

淺談Java獲得多線程的返回結(jié)果方式(3種)

瀏覽:232日期:2022-08-30 18:06:30

一:Java創(chuàng)建線程方式

繼承Thread類或者實現(xiàn)Runnable接口。但是Runnable 的 run() 方法是不帶返回值的,那如果我們需要一個耗時任務(wù)在執(zhí)行完之后給予返回值,應(yīng)該怎么做呢?

第一種方法:在 Runnable 的實現(xiàn)類中設(shè)置一個變量 V,在 run 方法中將其改變?yōu)槲覀兤诖慕Y(jié)果,然后通過一個 getV() 方法將這個變量返回。

package com.test.thread;import java.util.*;import sun.swing.AccumulativeRunnable;//獲得線程的返回結(jié)果方式一/* *在runnable實現(xiàn)類中設(shè)置一個變量x,在run方法中將其改變?yōu)槲覀兤诖慕Y(jié)果,然后通過一個getX()方法將這個變量返回 */public class RunnableTest { public static void main(String[] args) throws Exception { System.out.println('使用Runnable獲取返回結(jié)果'); List<Thread> workers = new ArrayList<>(10); List<RunnableAcction> tasks = new ArrayList<>(10); //創(chuàng)建10個線程,每個線程分別負責累加1-10,11-20,.........,91-100 for(int i=0;i<10;i++) { RunnableAcction task = new RunnableAcction(i*10+1,(i+1)*10); Thread work = new Thread(task,'累加器線程'+i); workers.add(work); tasks.add(task); work.start(); } int total = 0; for(int i = 0;i<workers.size();i++) { workers.get(i).join(); total += tasks.get(i).getResult(); } System.out.println('n累加的結(jié)果:'+total); } static final class RunnableAcction implements Runnable{ private int a; public RunnableAcction(int a, int b) { super(); this.a = a; this.b = b; } private int b; private int result; @Override public void run() { result = 0; try { for(int i=a;i<= b;i++) { result += i; Thread.sleep(100); } } catch (Exception e) { // TODO: handle exception } System.out.printf('(%s) - 運行結(jié)束,結(jié)果為 %dn',Thread.currentThread().getName(),result); } public int getResult() {//獲取線程返回結(jié)果 return result; } }}

第二種方法:使用 Callable 和 FutureTask。

使用 FutureTask 的過程如下:(1)通過一個 Callable 任務(wù)或者一個 Runnable(一開始就指定 result)任務(wù)構(gòu)造 FutureTask;(2)將 FutureTask 交給 Thread 去運行;(3)使用 FutureTask 的 get 方法(或者 Thread 的 join 方法)阻塞當前線程直到獲得任務(wù)的結(jié)果。

import java.util.*;import java.util.concurrent.*;public class CallableTest { public static void main(String[] args) throws Exception { System.out.println('使用 Callable 獲得返回結(jié)果:');List<FutureTask<Integer>> futureTasks = new ArrayList<>(10); // 新建 10 個線程,每個線程分別負責累加 1~10, 11~20, ..., 91~100 for (int i = 0; i < 10; i++) { AccumCallable task = new AccumCallable(i * 10 + 1, (i + 1) * 10); FutureTask<Integer> futureTask = new FutureTask<>(task); futureTasks.add(futureTask); Thread worker = new Thread(futureTask, '慢速累加器線程' + i); worker.start(); } int total = 0; for (FutureTask<Integer> futureTask : futureTasks) { total += futureTask.get(); // get() 方法會阻塞直到獲得結(jié)果 } System.out.println('累加的結(jié)果: ' + total); } static final class AccumCallable implements Callable<Integer> { private final int begin; private final int end; public AccumCallable(int begin, int end) { this.begin = begin; this.end = end; } @Override public Integer call() throws Exception { int result = 0; for (int i = begin; i <= end; i++) {result += i;Thread.sleep(100); } System.out.printf('(%s) - 運行結(jié)束,結(jié)果為 %dn', Thread.currentThread().getName(), result); return result; } } }

二:FutureTask介紹

FutureTask可用于異步獲取執(zhí)行結(jié)果或取消執(zhí)行任務(wù)的場景。通過傳入Runnable或者Callable的任務(wù)給FutureTask,直接調(diào)用其run方法或者放入線程池執(zhí)行,之后可以在外部通過FutureTask的get方法異步獲取執(zhí)行結(jié)果。因此,**FutureTask非常適合用于耗時的計算,主線程可以在完成自己的任務(wù)后,再去獲取結(jié)果。**另外,F(xiàn)utureTask還可以確保即使調(diào)用了多次run方法,它都只會執(zhí)行一次Runnable或者Callable任務(wù),或者通過cancel取消FutureTask的執(zhí)行等。

一個FutureTask 可以用來包裝一個 Callable 或是一個runnable對象。因為FurtureTask實現(xiàn)了Runnable方法,所以一個 FutureTask可以提交(submit)給一個Excutor執(zhí)行(excution)。

FutureTask執(zhí)行多任務(wù)計算的使用場景:

利用FutureTask和ExecutorService,可以用多線程的方式提交計算任務(wù),主線程繼續(xù)執(zhí)行其他任務(wù),當主線程需要子線程的計算結(jié)果時,再異步獲取子線程的執(zhí)行結(jié)果。

import java.util.*;import java.util.concurrent.*;public class FutureTest1 { public static void main(String[] args) { Task task = new Task();// 新建異步任務(wù),然后執(zhí)行futureTask FutureTask<Integer> future = new FutureTask<Integer>(task) { // 異步任務(wù)執(zhí)行完成,回調(diào) @Override protected void done() {try { System.out.println('future.done():' + get());} catch (InterruptedException e) { e.printStackTrace();} catch (ExecutionException e) { e.printStackTrace();} } }; // 創(chuàng)建線程池(使用了預定義的配置) ExecutorService executor = Executors.newCachedThreadPool(); executor.execute(future); try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } // 可以取消異步任務(wù) // future.cancel(true); try { // 阻塞,等待異步任務(wù)執(zhí)行完畢-獲取異步任務(wù)的返回值 System.out.println('future.get():' + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } // 異步任務(wù) static class Task implements Callable<Integer> { // 返回異步任務(wù)的執(zhí)行結(jié)果 @Override public Integer call() throws Exception { int i = 0; for (; i < 10; i++) {try { System.out.println('異步任務(wù):'+Thread.currentThread().getName() + '_' + i); Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace();} } return i; } }}

參考文章:https://blog.csdn.net/chenliguan/article/details/54345993https://blog.csdn.net/linchunquan/article/details/22382487https://segmentfault.com/a/1190000007767231

到此這篇關(guān)于淺談Java獲得多線程的返回結(jié)果方式的文章就介紹到這了,更多相關(guān)Java 多線程的返回結(jié)果內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区在线视频观看| 在线国产日韩| 另类综合日韩欧美亚洲| 国产日韩一区| 嫩呦国产一区二区三区av| 国产日本亚洲| 国产一区二区三区四区二区| 亚洲电影有码| 国产精品美女| 欧美视频久久| 精品精品久久| 日韩精品网站| 国产视频久久| 日韩久久一区| 久久精品一区二区国产| 精品欧美一区二区三区在线观看| 一区久久精品| 国产精区一区二区| 精品亚洲美女网站| 亚洲日产国产精品| 国产精品99在线观看| 伊人久久亚洲热| 久久中文在线| 女人天堂亚洲aⅴ在线观看| 久久国产生活片100| 91精品国产成人观看| 亚洲男人在线| 日韩av在线播放网址| 亚洲精品1区| 国产精品黄网站| 亚洲高清av| 国产调教精品| 一区视频在线| 国产一区二区三区久久久久久久久| 亚洲大全视频| 精品黄色一级片| 99日韩精品| 国际精品欧美精品| 亚洲天堂av资源在线观看| 福利一区二区免费视频| 亚洲精品观看| 久久久人人人| 日本欧美在线| 五月婷婷六月综合| 精品72久久久久中文字幕| 亚洲精品人人| 日韩精品首页| 国产高清亚洲| 少妇精品久久久一区二区| 久久精品青草| 国产videos久久| 日韩精品一区二区三区中文| 亚洲成人精品| 久久女人天堂| 日韩成人av影视| 爽好多水快深点欧美视频| 热三久草你在线| 国产精选一区| 伊人国产精品| 久久国产电影| 精品国产午夜| 国产精品宾馆| 91精品一区| 亚洲精品激情| 丝袜脚交一区二区| 欧美日一区二区| 电影天堂国产精品| 精品日本视频| 久久不见久久见国语| 日韩国产成人精品| 视频一区欧美日韩| 99视频在线精品国自产拍免费观看| аⅴ资源天堂资源库在线| 国产欧美日韩精品一区二区免费 | 久久香蕉国产| 美女精品视频在线| 免播放器亚洲| 日韩午夜av在线| 国产一区日韩一区| 久久精品亚洲人成影院| 成人亚洲一区二区| 水蜜桃久久夜色精品一区| 国产精品久久久久9999高清| 91免费精品国偷自产在线在线| 亚洲精品一区二区在线看| 日韩在线观看| 精品国产网站| 国产专区精品| 国产精品2023| 久久国产欧美日韩精品| 亚洲毛片视频| 99在线|亚洲一区二区| 国产综合亚洲精品一区二| 日韩一区三区| 中国字幕a在线看韩国电影| 鲁大师精品99久久久| 91精品丝袜国产高跟在线| 麻豆9191精品国产| 亚洲高清二区| 91日韩在线| 美女精品久久| 美女久久久精品| 美女久久99| 91综合网人人| 日韩一区电影| 欧美日韩精品免费观看视欧美高清免费大片 | 日韩精品第二页| 亚洲综合图色| 免费在线观看精品| 亚洲综合电影一区二区三区| 欧美日韩视频免费观看| 日韩另类视频| japanese国产精品| 在线亚洲免费| 免费成人av在线播放| 亚洲免费福利一区| 欧美日韩a区| 国产精品成人**免费视频| 欧美激情在线精品一区二区三区| 国产精品nxnn| 欧美丰满日韩| 亚洲欧美日韩高清在线| 日av在线不卡| 91成人小视频| 久久精品一本| 精品一区二区三区亚洲| 色乱码一区二区三区网站| 久久久久免费| 欧美一级精品| 免播放器亚洲| 欧美一区二区三区久久精品| 国产美女精品视频免费播放软件| 久久精品国产99国产| 激情欧美亚洲| 日韩久久一区| 国产精品久久久久久久久久10秀| 成人免费网站www网站高清| 激情五月综合| 五月亚洲婷婷 | 亚洲一级二级| 亚洲狼人精品一区二区三区| 91亚洲精品在看在线观看高清| 精品视频在线观看网站| 999精品在线| 亚洲欧美日本国产| 你懂的国产精品| 亚洲国产影院| 日韩成人av影视| 在线人成日本视频| 久久福利影视| 国产一区二区三区视频在线| 亚洲免费影院| 水蜜桃精品av一区二区| 久久久久久久久99精品大| 亚洲人成网站在线在线观看| 国产一区二区三区久久久久久久久| 欧美日韩免费观看一区=区三区 | 国产精品亚洲一区二区在线观看| 97se综合| 亚洲久久视频| 日韩黄色大片网站| 天堂久久av| 国产精品13p| 综合一区二区三区| 日产精品一区二区| 日本成人中文字幕| 蜜桃tv一区二区三区| 国产精品一区三区在线观看| 国产一区日韩一区| 国产精品亚洲产品| 日韩视频一区| 黄色在线网站噜噜噜| 欧美亚洲免费| 久色成人在线| 国产综合欧美| 91一区二区| 国产激情久久| 免费在线欧美视频| 视频福利一区| 日本欧美一区二区在线观看| 久久精品国产亚洲夜色av网站| 国产精品v亚洲精品v日韩精品| 蜜臀精品一区二区三区在线观看 | 亚洲1区在线| 不卡一区综合视频| 激情中国色综合| 日本欧美大码aⅴ在线播放| 不卡av一区二区| 日韩欧美字幕| 麻豆视频久久| 日本免费新一区视频| 亚洲激精日韩激精欧美精品| 超碰在线99| 精品资源在线| 国产午夜一区| 日韩激情av在线| 日韩视频一区二区三区在线播放免费观看| av免费不卡国产观看| 精品欧美视频| 麻豆视频一区|