public class Ticket {
private int number =30;
public void sale(){
if(number > 0){
System.out.println(Thread.currentThread().getName() + "卖出了" +(number--) + "票,剩余:" + number);
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(()->{
for (int i = 0; i < 40; i++) {
ticket.sale();
}
},"A").start();
new Thread(()->{
for (int i = 0; i < 40; i++) {
ticket.sale();
}
},"B").start();
new Thread(()->{
for (int i = 0; i < 40; i++) {
ticket.sale();
}
},"C").start();
}
}
执行结果:
可以看出多线程情况下,数据是不正确的
传统做法
加上synchronized关键字
加上synchronized关键字看下执行结果,可以看到是有序的