import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 1、用於解決多線程安全問題的方式: * * synchronized:隱式鎖 * 1. 同步代碼塊 * * 2. 同步方法 * * jdk 1.5 後: * 3. 同步鎖 Lock * 注意:是一個顯示鎖,須要經過 lock() 方法上鎖,必須經過 unlock() 方法進行釋放鎖 */ public class TestLock { public static void main(String[] args) { Ticket ticket = new Ticket(); new Thread(ticket, "1號窗口").start(); new Thread(ticket, "2號窗口").start(); new Thread(ticket, "3號窗口").start(); } } class Ticket implements Runnable{ private int tick = 100; private Lock lock = new ReentrantLock(); @Override public void run() { while(true){ lock.lock(); //上鎖 try{ if(tick > 0){ try { Thread.sleep(200); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName() + " 完成售票,餘票爲:" + --tick); } }finally{ lock.unlock(); //釋放鎖 } } } }