package com.ldp.demo.Thread;
public class Ticket_Synchronized {
public static void main(String[] args) {
Ticket_tation ticket = new Ticket_tation();
new Thread(ticket, "a") {
}.start();
new Thread(ticket, "b") {
}.start();
new Thread(ticket, "c") {
}.start();
new Thread(ticket, "d") {
}.start();
}
}
class Ticket_tation implements Runnable {
private int ticketNum = 10;
@Override
public void run() {
while (ticketNum > 0) { //while和synchronized 的位置不能互换,
synchronized (this) { //要不然票会一直是同一个窗口出票
//synchronized 在这里锁的是对象
if (ticketNum==0){
System.out.println( Thread.currentThread().getName()+"出票失败,"+"票已售完!" );
return;
}
try {
Thread.sleep(50);//睡眠50毫秒,要不然执行太快,会是同一个窗口出票
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println((ticketNum--) + "号票已售出!" + Thread.currentThread().getName());
}
}
}
}
结果
10号票已售出!a
9号票已售出!d
8号票已售出!d
7号票已售出!c
6号票已售出!b
5号票已售出!b
4号票已售出!c
3号票已售出!c
2号票已售出!c
1号票