模拟三个站点售卖车票
public class BuyTickets {
public static void main(String[] args) throws InterruptedException {
BuyTicket buyTicket = new BuyTicket();
Thread thread1 = new Thread(buyTicket, "站点一");
Thread thread2 = new Thread(buyTicket, "站点二");
Thread thread3 = new Thread(buyTicket, "站点三");//多个线程共享一个变量buyTicket
thread1.start();
thread2.start();
thread3.start();
}
}
class BuyTicket implements Runnable {
private int tickets = 20;//默认20张票
Object o = new Object();//使用同一把对象锁
@Override
public void run() {
while (true) {
synchronized (o) {
if (this.tickets > 0) {
try {
Thread.sleep(100);//休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "售出第" + (20 - tickets-- + 1) + "张票," + "还剩余" + tickets + "张票");
} else {
break;
}
}
}
}
}
结果如下:
注意点:多个线程操作时一定要操作同一个对象,加锁时要使多个线程使用同一把锁