java - 使用多线程卖票但为什么没有错误
问题描述
我使用多个线程来模拟门票销售,但为什么似乎没有多个线程在销售同一张门票?
这是我的代码:
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
解决方案
推荐阅读
- azure - AKS 群集的备份/灾难恢复
- php - php 显示 3 个日期:下周三、周六、周日(包括今天)
- python - 如何遍历数组并在python中并排打印每个索引?
- reactjs - 如何在响应中导致捕捉到 promise.all
- r - 带有可选参数的函数中的“weighted.mean”?
- palantir-foundry - Phonograph 中的输入/支持数据集和回写数据集有什么区别?
- apache-kafka - 在第一个消费者连接之前产生的消息丢失
- swift - 如何有条件地调用 SwiftUI NavigationLink?
- python - 使用 lxml.html 抓取 Scopus
- external-tables - 外部表的 Synapse 数据仓库中的列级安全性