Java多线程:多线程模拟抢票应用

素颜马尾好姑娘i 2022-03-20 10:50 492阅读 0赞

实现代码

  1. package com.oumuv.ticket;
  2. /** * 多线程抢票应用 */
  3. public class TicketModel {
  4. public static void main(String[] args) {
  5. TicketModel ticketModel = new TicketModel();
  6. Ticket ticket = ticketModel.new Ticket(20);//设置余票数
  7. TicketConsumer ticketConsumer = ticketModel.new TicketConsumer("售票点1", ticket);
  8. TicketConsumer ticketConsumer2 = ticketModel.new TicketConsumer("售票点2", ticket);
  9. TicketConsumer ticketConsumer3 = ticketModel.new TicketConsumer("售票点3", ticket);
  10. new Thread(ticketConsumer).start();
  11. new Thread(ticketConsumer2).start();
  12. new Thread(ticketConsumer3).start();
  13. }
  14. /** *余票 */
  15. class Ticket {
  16. int num;
  17. public Ticket(int num) {
  18. this.num = num;
  19. }
  20. }
  21. /** *售票端 */
  22. class TicketConsumer implements Runnable {
  23. String name;
  24. Ticket ticket;
  25. public TicketConsumer(String name, Ticket ticket) {
  26. this.name = name;
  27. this.ticket = ticket;
  28. }
  29. @Override
  30. public void run() {
  31. while (true) {
  32. synchronized (ticket) {
  33. if (ticket.num > 0) {
  34. System.out.println(name + ":您成功购买到一张票,余票剩余" + (--ticket.num));
  35. try {
  36. Thread.sleep(100);
  37. } catch (InterruptedException e) {
  38. e.printStackTrace();
  39. }
  40. } else {
  41. System.out.println(name + ":余票不足,购买失败");
  42. break;
  43. }
  44. }
  45. }
  46. }
  47. }
  48. }

可能输出的结果

  1. 售票点1:您成功购买到一张票,余票剩余19
  2. 售票点1:您成功购买到一张票,余票剩余18
  3. 售票点1:您成功购买到一张票,余票剩余17
  4. 售票点1:您成功购买到一张票,余票剩余16
  5. 售票点1:您成功购买到一张票,余票剩余15
  6. 售票点1:您成功购买到一张票,余票剩余14
  7. 售票点1:您成功购买到一张票,余票剩余13
  8. 售票点1:您成功购买到一张票,余票剩余12
  9. 售票点1:您成功购买到一张票,余票剩余11
  10. 售票点1:您成功购买到一张票,余票剩余10
  11. 售票点1:您成功购买到一张票,余票剩余9
  12. 售票点1:您成功购买到一张票,余票剩余8
  13. 售票点1:您成功购买到一张票,余票剩余7
  14. 售票点3:您成功购买到一张票,余票剩余6
  15. 售票点3:您成功购买到一张票,余票剩余5
  16. 售票点3:您成功购买到一张票,余票剩余4
  17. 售票点2:您成功购买到一张票,余票剩余3
  18. 售票点2:您成功购买到一张票,余票剩余2
  19. 售票点2:您成功购买到一张票,余票剩余1
  20. 售票点2:您成功购买到一张票,余票剩余0
  21. 售票点3:余票不足,购买失败
  22. 售票点1:余票不足,购买失败
  23. 售票点2:余票不足,购买失败

发表评论

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

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

相关阅读

    相关 Java线安全

    1、前言 生活中有很多多线程的案例,购票就是一个很常见的问题,如果我们编写的程序时线程不安全返回的结果将会是不可想象,手里会出现莫名奇妙的负票数! 2、多线程执行过程中经