JAVA多線程實現的三種方式

JAVA多線程實現方式主要有三種:繼承Thread類、實現Runnable接口、使用ExecutorService、Callable、Future實現有返回結果的多線程。

其中前兩種方式線程執行完后都沒有返回值,只有最后一種是帶返回值的。

前兩種省略,著重看看第三種:

ExecutorService、Callable、Future這個對象實際上都是屬于Executor框架中的功能類。返回結果的線程是在JDK1.5中引入的新特征。

可返回值的任務必須實現Callable接口,類似的,無返回值的任務必須Runnable接口。執行Callable任務后,可以獲取一個Future的對象,在該對象上調用get就可以獲取到Callable任務返回的Object了,再結合線程池接口ExecutorService就可以實現傳說中有返回結果的多線程了。

import java.util.concurrent.*;  
import java.util.Date;  
import java.util.List;  
import java.util.ArrayList;  /** 
* 有返回值的線程 
*/  
@SuppressWarnings("unchecked")  
public class Test {  
public static void main(String[] args) throws ExecutionException,  InterruptedException {  System.out.println("----程序開始運行----");  Date date1 = new Date();  int taskSize = 5;  // 創建一個線程池  ExecutorService pool = Executors.newFixedThreadPool(taskSize);  // 創建多個有返回值的任務  List<Future> list = new ArrayList<Future>();  for (int i = 0; i < taskSize; i++) {  Callable c = new MyCallable(i + " ");  // 執行任務并獲取Future對象  Future f = pool.submit(c);  // System.out.println(">>>" + f.get().toString());  
    list.add(f);  }  // 關閉線程池  
   pool.shutdown();  // 獲取所有并發任務的運行結果  for (Future f : list) {  // 從Future對象上獲取任務的返回值,并輸出到控制臺  System.out.println(">>>" + f.get().toString());  }  Date date2 = new Date();  System.out.println("----程序結束運行----,程序運行時間【"  + (date2.getTime() - date1.getTime()) + "毫秒】");  
}  
}  class MyCallable implements Callable<Object> {  
private String taskNum;  MyCallable(String taskNum) {  this.taskNum = taskNum;  
}  public Object call() throws Exception {  System.out.println(">>>" + taskNum + "任務啟動");  Date dateTmp1 = new Date();  Thread.sleep(1000);  Date dateTmp2 = new Date();  long time = dateTmp2.getTime() - dateTmp1.getTime();  System.out.println(">>>" + taskNum + "任務終止");  return taskNum + "任務返回運行結果,當前任務時間【" + time + "毫秒】";  
}  
}  

?

轉載于:https://www.cnblogs.com/lanseyitai1224/p/7910679.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252813.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2springboot:快速創建springboot項目

使用IDEA快速創建springboot項目流程&#xff1a; 創建新的項目選擇 項目的命名以及包名 需要什么包就導入什么包 進行測試的單元 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>&…

如何做好渠道銷售?

作者&#xff1a;路人李志強鏈接&#xff1a;https://www.zhihu.com/question/19689177/answer/28508799來源&#xff1a;知乎著作權歸作者所有。商業轉載請聯系作者獲得授權&#xff0c;非商業轉載請注明出處。作為一名一線品牌的渠道銷售&#xff0c;如何讓代理商放棄其他小品…

2017浙江省賽 B - Problem Preparation ZOJ - 3959

地址&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode3959 題目&#xff1a; Its time to prepare the problems for the 14th Zhejiang Provincial Collegiate Programming Contest! Almost all members of Zhejiang University programming conte…

jQuery導入代碼片段并綁定事件

a.html <div><button class"button" >點我達</button> </div> b.html <html> <head><script type"text/javascript" src"./js/jquery-1.0.1.js"></script><meta http-equiv"Content-Ty…

驗證碼識別

基于Keras&#xff0c;識別簡單的4位字符的驗證碼。 https://github.com/ypwhs/captcha_break

LinCode落單的數

easy 落單的數 查看執行結果 60% 通過給出2*n 1 個的數字&#xff0c;除當中一個數字之外其它每一個數字均出現兩次。找到這個數字。 您在真實的面試中是否遇到過這個題&#xff1f; Yes例子 給出 [1,2,2,1,3,4,3]。返回 4 挑戰 一次遍歷&#xff0c;常數級的額外空間復雜度…

漢邦高科范俊峰:關于透霧攝像機那點事

慧聰安防網訊 生活在北方的人們&#xff0c;隔三差五就和霧霾來一次親密接觸&#xff0c;霧霾對人們的出行和交通有很大的影響&#xff0c;霧霾籠罩之下&#xff0c;人們出行如果闖紅燈、車輛違規行駛發生交通事故&#xff0c;交通監控攝像頭只能“霧里看花”&#xff0c;透霧攝…

SpringBoot注解大全(轉)

原文鏈接&#xff1a;[springBoot系列]--springBoot注解大全 一、注解(annotations)列表 SpringBootApplication&#xff1a;包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan讓spring Boot掃描到Configuration類并把它加入到程序上下文。…

祭奠我的2018

提前寫這篇文章&#xff0c;是因為深深的感覺到自己的無能 18年伊始&#xff0c;在浪潮干了大半年的我 還沉醉在深深的滿足感中&#xff0c;感覺自己對工作游刃有余 那種自大和自我滿足感充斥著我的心態 已經變得不會學習了 后來有一次機遇&#xff0c;讓我有了跳出舒適的機會 …

工業攝像頭傳感器尺寸與像元尺寸的關系

http://www.mv186.com/show-list.php?id462 在機器自動化行業檢測應用中&#xff0c;工業攝像頭是必備的硬件&#xff0c;而圖像傳感器又是工業攝像頭中最最關鍵核心的東西。圖像傳感器的尺寸&#xff08;靶面大小&#xff09;&#xff0c;往往直接關系到成像的質量。通常來講…

CF-798B

B. Mike and stringstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMike has n strings s1,?s2,?...,?sn each consisting of lowercase English letters. In one move he can choose a string si, erase the fi…

微信小程序倒計時實現

思路&#xff1a;跟一般js倒計時一樣&#xff0c;主要在于this的變相傳遞。 實現效果&#xff1a; wxml文件部分代碼&#xff1a; common.js文件 : 引用頁JS文件: PS: 1.在data里初始化時間格式&#xff0c;是避免時間加載的第1秒顯示為空白&#xff0c;因為setTimeOut是在1s以…

基于Kubeadm的Flannel分析

Flannel概述 Flannel是將多個不同子網&#xff08;基于主機Node&#xff09;通過被Flannel維護的Overlay網絡拼接成為一張大網來實現互聯的&#xff0c;通過官方的一張網絡拓撲圖我們可以對其基本原理一目了然&#xff1a; 值得探討的是&#xff0c;flannel的這個overlay網絡支…

sensor的skipping and binning 模式

1、第一種理解 關于sensor的縮放存在兩種模式 binning mode 和skip mode skipping mode 就是把想要的數據采集上來 把其余的數據扔掉 如下所示 column skip 2 row skip 2 留下的就是白色的像素 黑色的像素丟掉。 binning mode 就是把相鄰的像素合成一個像素&#xff0c;然后再…

5 結構型模式之 - 適配器模式

5 結構型模式之 - 適配器模式 適配器模式的介紹&#xff1a;適配器模式在開發中使用率很高&#xff0c;適配器是將兩個不兼容的類融合在一起&#xff0c;它有點像粘合劑&#xff0c;將不同的東西通過一種轉換使得它們能夠協作起來。例如經常碰到兩個不相關的類之間進行交互&…

Android進程保活

凡是做過幾年Android開發的&#xff0c;都不能不面對進程保活這一問題。特別是這兩年&#xff0c;面對谷歌&#xff0c;國內定制ROM&#xff0c;安全軟件等多方圍剿的情況下&#xff0c;app在后臺保活的難度越來越大&#xff0c;可以說包括QQ、微信在內的所有app&#xff0c;都…

治安卡口攝像機與電警抓拍機之間有什么區別?

接下來小編和大家說說它們有哪些相同和不同的地方&#xff0c;供大家參考。 治安卡口&#xff1a; 卡口攝像機主要是用于城市道路或高速公路出入口、收費站等重點治安監控地段的全天候實時檢測與記錄收費站、交通或治安檢查站等地點。 治安卡口監控系統的前端部分主要由三個單元…

https證書互信解決方案—創建私有CA并申請證書

前言 https相較于http而言有很大的安全性&#xff0c;當我們一個服務開啟https并與之通信時&#xff0c;往往需要證書的認證&#xff0c;如果是瀏覽器訪問服務&#xff0c;只要在瀏覽器內設置信任證書即可&#xff0c;而如果是程序內訪問服務&#xff08;如java程序&#xff09…

[轉]Unity-移動設備可用的壓縮解壓縮源碼

原文&#xff1a;http://www.manew.com/thread-103250-1-1.html 最近在做客戶端數據的分離&#xff0c;不希望對項目有什么影響&#xff0c;也不太想用AssetBundle&#xff0c;太麻煩&#xff0c;就在網上找了找開源的C#壓縮算法&#xff0c;找來找去&#xff0c;發現不是不支持…

高亮顯示QSS文件

轉【作者&#xff1a;一去丶二三里 博客地址&#xff1a;http://blog.csdn.net/liang19890820】 簡述 語法高亮是文本編輯器用來顯示文本的&#xff0c;特別是源代碼&#xff0c;根據不同的類別來用不同的顏色和字體顯示。這個功能有助于編寫結構化的語言&#xff0c;例如&…