Demo07.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package J20250801.homework;
  2. import java.util.ArrayList;
  3. import java.util.Random;
  4. import java.util.concurrent.*;
  5. /**
  6. * @author WanJl
  7. * @version 1.0
  8. * @title Demo07
  9. * @description
  10. * @create 2025/8/1
  11. */
  12. public class Demo07 {
  13. private static Random ran=new Random();
  14. /**
  15. * 模拟计算用户月度消费
  16. * @param userId 用户id
  17. * @return 消费金额(1000~5000)
  18. */
  19. public static int getMonthlyConsumption(int userId) throws InterruptedException {
  20. //模拟计算耗时1~2秒
  21. int i=1000+ran.nextInt(1001);
  22. Thread.sleep(i);
  23. //模拟生成随机消费金额
  24. int amount=1000+ran.nextInt(4001);
  25. System.out.println("用户"+userId+"的月度消费计算完成:"+amount+"元");
  26. return amount;
  27. }
  28. public static void main(String[] args) throws ExecutionException, InterruptedException {
  29. ExecutorService pool = Executors.newCachedThreadPool();
  30. ArrayList<Future<Integer>> list=new ArrayList<>();
  31. //提交5个用户的消费计算任务
  32. for (int i = 0; i < 5; i++) {
  33. final int userId=i+1;
  34. Future<Integer> future=pool.submit(()-> getMonthlyConsumption(userId));
  35. list.add(future);
  36. }
  37. //等待所有任务全部完成后收集结果
  38. int total=0;
  39. StringBuilder sb=new StringBuilder();
  40. for (int i = 0; i < list.size(); i++) {
  41. final int userId=i+1;
  42. Integer amount = list.get(i).get();
  43. total+=amount;
  44. sb.append("用户"+userId+"="+amount);
  45. if (i<list.size()-1){
  46. sb.append(",");
  47. }
  48. }
  49. System.out.println("所有用户总共消费:"+total+"元,用户消费明细:"+sb);
  50. pool.shutdown();
  51. if (!pool.awaitTermination(3, TimeUnit.SECONDS)){
  52. pool.shutdownNow();
  53. }
  54. }
  55. }