首页 > 解决方案 > 使用多线程卖票但为什么没有错误

问题描述

我使用多个线程来模拟门票销售,但为什么似乎没有多个线程在销售同一张门票?

这是我的代码:

public class SellTicket {
    public static void main(String[] args) {
        Ticket ticket = new Ticket();

        new Thread(()->{
            for (int i=0; i< 50; i++) {
                ticket.sell();
            }
        }, "A").start();
        new Thread(()->{
            for (int i=0; i< 50; i++) {
                ticket.sell();
            }
        }, "B").start();
        new Thread(()->{
            for (int i=0; i< 50; i++) {
                ticket.sell();
            }
        }, "C").start();
    }
}

class Ticket {
    private int number = 50;

    public void sell() {
        if (number > 0)
            System.out.println(Thread.currentThread().getName() + " selled " + number-- + ", remain " + number);
    }
}

结果是这样的:
A卖了50,还剩49
A卖出了49,还剩48
A卖出了48,还剩47
A卖出了47,还剩46
A卖出了46,还剩45
...
B卖出了35,还剩34
A卖出了34,剩下 33
B 卖出 33, 仍然 32
A 卖出 32, 仍然 31
B 卖出 31, 仍然 30
A 卖出 30, 仍然 29
B 卖出 29, 仍然 28
A 卖出 28, 仍然 27
B 卖出 27, 仍然 26
...
B 卖出 6 , 剩余 5
B 卖出 5, 剩余 4
B 卖出 4, 剩余 3
B 卖出 3, 剩余 2
B 卖出 2, 剩余 1
B 卖出 1, 剩余 0

标签: javamultithreading

解决方案


推荐阅读