package com.sf.javase.thread.sync; import lombok.SneakyThrows; // 解决买票的超卖问题 public class Ticket { public static void main(String[] args) { Window window = new Window(); // 三个线程使用同一个window对象 // 一个window对象 只有一个lock对象 所以使用的是同一把锁 new Thread(window, "t1").start(); new Thread(window, "t2").start(); new Thread(window, "t3").start(); } private static class Window implements Runnable { private int ticketsNum = 100; // 创建一个对象 用对象来加锁 Object lock = new Object(); // lombok提供了一个处理异常的注解 @SneakyThrows @Override public void run() { while (true) { // 同步代码块 synchronized (lock) { if (ticketsNum > 0) { Thread.sleep(100); System.out.println(Thread.currentThread().getName() + " : " + ticketsNum--); } } } } } }