多线程卖票复习传统版一
多线程卖票问题
假设现在有3个线程同时要卖出30张票,代码如何实现,请看传统版:
class Ticket {
private int number = 30;
public synchronized void saleTicket(){
if(number > 0){
System.out.println(Thread.currentThread().getName() + "\t卖出第:" +(number--) + "\t还剩:" + number);
}
}
}
class SaleTicket{
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 30; i++) {
ticket.saleTicket();
}
}
},"AAA").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 30; i++) {
ticket.saleTicket();
}
}
},"BBB").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 30; i++) {
ticket.saleTicket();
}
}
},"CCC").start();
}
}
```java
执行结果如下:
AAA 卖出第:30 还剩:29
AAA 卖出第:29 还剩:28
AAA 卖出第:28 还剩:27
AAA 卖出第:27 还剩:26
AAA 卖出第:26 还剩:25
AAA 卖出第:25 还剩:24
AAA 卖出第:24 还剩:23
AAA 卖出第:23 还剩:22
AAA 卖出第:22 还剩:21
AAA 卖出第:21 还剩:20
AAA 卖出第:20 还剩:19
AAA 卖出第:19 还剩:18
AAA 卖出第:18 还剩:17
AAA 卖出第:17 还剩:16
AAA 卖出第:16 还剩:15
BBB 卖出第:15 还剩:14
BBB 卖出第:14 还剩:13
BBB 卖出第:13 还剩:12
BBB 卖出第:12 还剩:11
BBB 卖出第:11 还剩:10
BBB 卖出第:10 还剩:9
BBB 卖出第:9 还剩:8
BBB 卖出第:8 还剩:7
BBB 卖出第:7 还剩:6
BBB 卖出第:6 还剩:5
BBB 卖出第:5 还剩:4
BBB 卖出第:4 还剩:3
BBB 卖出第:3 还剩:2
BBB 卖出第:2 还剩:1
BBB 卖出第:1 还剩:0