1 package test.guyezhai.thread;
2
3 import java.util.ArrayList;
4 import java.util.Date;
5 import java.util.List;
6 import java.util.concurrent.Callable;
7 import java.util.concurrent.ExecutionException;
8 import java.util.concurrent.ExecutorService;
9 import java.util.concurrent.Executors;
10 import java.util.concurrent.Future;
11
12 @SuppressWarnings("unchecked")
13 public class TestThread {
14
15 @SuppressWarnings("rawtypes")
16 public static void main(String[] args) throws ExecutionException, InterruptedException {
17 System.out.println("----程序开始运行----");
18 Date date1 = new Date();
19
20 int taskSize = 50000;
21 // 创建一个线程池
22 ExecutorService pool = Executors.newFixedThreadPool(taskSize);
23 // 创建多个有返回值的任务
24 List<Future> list = new ArrayList<Future>();
25 for (int i = 0; i < taskSize; i++) {
26 Callable c = new MyCallable(i + " ");
27 // 执行任务并获取Future对象
28 Future f = pool.submit(c);
29 // System.out.println(">>>" + f.get().toString());
30 list.add(f);
31 }
32 // 关闭线程池
33 pool.shutdown();
34
35 // 获取所有并发任务的运行结果
36 for (Future f : list) {
37 // 从Future对象上获取任务的返回值,并输出到控制台
38 System.out.println(">>>" + f.get().toString());
39 }
40
41 Date date2 = new Date();
42 System.out.println("----程序结束运行----,程序运行时间【" + (date2.getTime() - date1.getTime()) + "毫秒】");
43 }
44 }
45
46 class MyCallable implements Callable<Object> {
47 private String taskNum;
48
49 MyCallable(String taskNum) {
50 this.taskNum = taskNum;
51 }
52
53 @Override
54 public Object call() throws Exception {
55 System.out.println(">>>" + taskNum + "任务启动");
56 Date dateTmp1 = new Date();
57 Thread.sleep(1000);
58 Date dateTmp2 = new Date();
59 long time = dateTmp2.getTime() - dateTmp1.getTime();
60 System.out.println(">>>" + taskNum + "任务终止");
61 return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
62 }
63 }