当前位置:   article > 正文

Java多线程例子8个窗口同时卖5张票(12306抢票机制)

Java多线程例子8个窗口同时卖5张票(12306抢票机制)

国际惯例,先上代码:

  1. package com.itqs;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class ThreadStation {
  5. //定义售票线程类(也就是窗口)
  6. public static class Station extends Thread{
  7. //构造方法给线程名字赋值
  8. public Station(String name) {
  9. super(name);
  10. }
  11. //票数要静态定义
  12. static int tick=5;
  13. //静态钥匙
  14. static Object ob ="key"; //值是任意的
  15. //重写run方法,实现售票操作
  16. @Override
  17. public void run() {
  18. List<Integer> list = new ArrayList<>();
  19. while (tick>0) {
  20. synchronized(ob) { //必须使用一个同步锁,进去的人会把钥匙拿在手上,出来后才能交出钥匙
  21. if (tick>0) {
  22. System.out.printf("%s卖出了第%d张票 \n",getName(),tick);
  23. list.add(tick);
  24. tick--;
  25. }else {
  26. System.out.printf("%s:票已售空 \n",getName());
  27. }
  28. }
  29. try {
  30. sleep((int)(Math.random()*3000)+1); //随机休息1-3000ms
  31. }catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. Sys
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/632138
推荐阅读
相关标签
  

闽ICP备14008679号