Demo06.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package J20250801.homework;
  2. import java.util.concurrent.*;
  3. /**
  4. * @author WanJl
  5. * @version 1.0
  6. * @title Demo06
  7. * @description
  8. * @create 2025/8/1
  9. */
  10. public class Demo06 {
  11. private static int successCount=0;
  12. public static void main(String[] args) {
  13. ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(
  14. 20, //核心线程数
  15. 50,//最大线程数
  16. 60l,//线程空余最大存活时间
  17. TimeUnit.SECONDS,//时间单位
  18. new LinkedBlockingQueue<>(500), //工作队列
  19. Executors.defaultThreadFactory(),//线程工厂
  20. new ThreadPoolExecutor.DiscardOldestPolicy()//拒绝策略,扔掉最久的,加入当前的
  21. );
  22. //记录开始时间
  23. long startTime = System.currentTimeMillis();
  24. //提交1000个下单请求
  25. for (int i = 0; i < 1000; i++) {
  26. //用户id
  27. final int userId=i+1;
  28. poolExecutor.submit(()->{
  29. try {
  30. //模拟下单处理耗时50ms
  31. System.out.println("用户"+userId+"下单中...");
  32. Thread.sleep(50);
  33. successCount++;
  34. } catch (InterruptedException e) {
  35. Thread.currentThread().interrupt();
  36. System.out.println("用户"+userId+"下单被中断");
  37. }
  38. });
  39. }
  40. //关闭线程池
  41. poolExecutor.shutdown();
  42. //等待所有任务完成
  43. try {
  44. if(!poolExecutor.awaitTermination(1,TimeUnit.MINUTES)){
  45. poolExecutor.shutdownNow();
  46. }
  47. } catch (InterruptedException e) {
  48. poolExecutor.shutdownNow();
  49. }
  50. //记录结束时间
  51. long endTime = System.currentTimeMillis();
  52. long time=endTime-startTime;
  53. System.out.println("------处理结果统计------");
  54. System.out.println("总耗时:"+time+"毫秒");
  55. System.out.println("成功处理的订单数为:"+successCount);
  56. System.out.println("被拒绝的订单数为:"+(1000-successCount));
  57. }
  58. }