Java通过Callable实现多线程

忘是亡心i 2022-06-02 10:17 319阅读 0赞
  1. import java.util.concurrent.*;
  2. import java.util.Date;
  3. import java.util.List;
  4. import java.util.ArrayList;
  5. public class Test implements Callable<Object>{
  6. private String taskNum;
  7. Test(String taskNum) {
  8. this.taskNum = taskNum;
  9. }
  10. public static void main(String[] args) throws ExecutionException,InterruptedException {
  11. System.out.println("----程序开始运行----");
  12. Date date1 = new Date();
  13. int taskSize = 5;
  14. // 创建一个线程池
  15. ExecutorService pool = Executors.newFixedThreadPool(taskSize);
  16. // 创建多个有返回值的任务
  17. List<Future> list = new ArrayList<Future>();
  18. for (int i = 0; i < taskSize; i++) {
  19. Callable c = new Test(i + " ");
  20. // 执行任务并获取Future对象
  21. Future f = pool.submit(c);
  22. list.add(f);
  23. }
  24. // 关闭线程池
  25. pool.shutdown();
  26. // 获取所有并发任务的运行结果
  27. for (Future f : list) {
  28. // 从Future对象上获取任务的返回值,并输出到控制台
  29. System.out.println(">>>" + f.get().toString());
  30. }
  31. Date date2 = new Date();
  32. System.out.println("----程序结束运行----,程序运行时间【" + (date2.getTime() - date1.getTime()) + "毫秒】");
  33. }
  34. public Object call() throws Exception {
  35. System.out.println(">>>" + taskNum + "任务启动");
  36. Date dateTmp1 = new Date();
  37. Thread.sleep(1000);
  38. Date dateTmp2 = new Date();
  39. long time = dateTmp2.getTime() - dateTmp1.getTime();
  40. System.out.println(">>>" + taskNum + "任务终止");
  41. return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
  42. }
  43. }

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线实现Callable

    创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须

    相关 线callable

    传统的thread里面,在执行完任务之后无法获取执行结果。通过共享变量或者使用线程通信获取结果,比较麻烦。 就是Runnable接口,线程的真正业务在run里面。 jd