有返回值的多线程demo
生活随笔
收集整理的這篇文章主要介紹了
有返回值的多线程demo
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
package com.jimmy.demo.util;
import java.util.HashMap;
import java.util.concurrent.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
/**
* 有返回值的線(xiàn)程
*/
@SuppressWarnings("unchecked")
public class Test {
public static void main(String[] args) throws ExecutionException,
InterruptedException {
System.out.println("----程序開(kāi)始運(yùn)行----");
Date date1 = new Date();
int taskSize = 1;
// 創(chuàng)建一個(gè)線(xiàn)程池
ExecutorService pool = Executors.newFixedThreadPool(1);
// 創(chuàng)建多個(gè)有返回值的任務(wù)
List<Future> list = new ArrayList<Future>();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 執(zhí)行任務(wù)并獲取Future對(duì)象
Future f = pool.submit(c);
System.out.println(">>>" + f.get().toString());
list.add(f);
}
// 關(guān)閉線(xiàn)程池
pool.shutdown();
// 獲取所有并發(fā)任務(wù)的運(yùn)行結(jié)果
for (Future f : list) {
// 從Future對(duì)象上獲取任務(wù)的返回值,并輸出到控制臺(tái)
System.out.println(">>>" + f.get().toString());
}
Date date2 = new Date();
System.out.println("----程序結(jié)束運(yùn)行----,程序運(yùn)行時(shí)間【"
+ (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 + "任務(wù)啟動(dòng)");
Date dateTmp1 = new Date();
// Thread.sleep(1000);
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println(">>>" + taskNum + "任務(wù)終止");
return taskNum + "=====" + Thread.currentThread().getName() + "任務(wù)返回運(yùn)行結(jié)果,當(dāng)前任務(wù)時(shí)間【" + time + "毫秒】";
}
}
import java.util.HashMap;
import java.util.concurrent.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
/**
* 有返回值的線(xiàn)程
*/
@SuppressWarnings("unchecked")
public class Test {
public static void main(String[] args) throws ExecutionException,
InterruptedException {
System.out.println("----程序開(kāi)始運(yùn)行----");
Date date1 = new Date();
int taskSize = 1;
// 創(chuàng)建一個(gè)線(xiàn)程池
ExecutorService pool = Executors.newFixedThreadPool(1);
// 創(chuàng)建多個(gè)有返回值的任務(wù)
List<Future> list = new ArrayList<Future>();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 執(zhí)行任務(wù)并獲取Future對(duì)象
Future f = pool.submit(c);
System.out.println(">>>" + f.get().toString());
list.add(f);
}
// 關(guān)閉線(xiàn)程池
pool.shutdown();
// 獲取所有并發(fā)任務(wù)的運(yùn)行結(jié)果
for (Future f : list) {
// 從Future對(duì)象上獲取任務(wù)的返回值,并輸出到控制臺(tái)
System.out.println(">>>" + f.get().toString());
}
Date date2 = new Date();
System.out.println("----程序結(jié)束運(yùn)行----,程序運(yùn)行時(shí)間【"
+ (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 + "任務(wù)啟動(dòng)");
Date dateTmp1 = new Date();
// Thread.sleep(1000);
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println(">>>" + taskNum + "任務(wù)終止");
return taskNum + "=====" + Thread.currentThread().getName() + "任務(wù)返回運(yùn)行結(jié)果,當(dāng)前任務(wù)時(shí)間【" + time + "毫秒】";
}
}
----程序開(kāi)始運(yùn)行----
>>>0 任務(wù)啟動(dòng)
>>>0 任務(wù)終止
>>>0 =====pool-1-thread-1任務(wù)返回運(yùn)行結(jié)果,當(dāng)前任務(wù)時(shí)間【0毫秒】
>>>0 =====pool-1-thread-1任務(wù)返回運(yùn)行結(jié)果,當(dāng)前任務(wù)時(shí)間【0毫秒】
----程序結(jié)束運(yùn)行----,程序運(yùn)行時(shí)間【8毫秒】
轉(zhuǎn)載于:https://www.cnblogs.com/jimmy-muyuan/p/6013611.html
總結(jié)
以上是生活随笔為你收集整理的有返回值的多线程demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android 网络请求HttpURLC
- 下一篇: c语言中有bool型变量吗?