class Window2 extends Thread { static int ticketNumber2 = 100; private static final ReentrantLock r = new ReentrantLock(); @Override public void run() { while (true) { try { r.lock(); try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } if (ticketNumber2 > 0) { System.out.println(Thread.currentThread().getName() + "售票号:" + ticketNumber2); ticketNumber2--; } else { break; } } finally { r.unlock(); } } } } public class LockSaleTicket { public static void main(String[] args) { Window2 w1 = new Window2(); Window2 w2 = new Window2(); Window2 w3 = new Window2(); w1.start(); w2.start(); w3.start(); } }
其中为了确保 r.unlock(); 方法成功发挥作用,用Try{ }finally{ r.unlock(); }来保证