package cn.bruce.Thread; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //多线程售票案例 //解决安全问题,JAVA程序提供了lock技术{线程要操作的共享数据} public class MoreThreadDemo3 { public static void main(String[] args) { // 创建Runnable接口实现类对象 Ticket t = new Ticket(); // 创建三个Thread类对象,传递Runnable接口实现类 Thread t0 = new Thread(t, "窗口1"); Thread t1 = new Thread(t, "窗口2"); Thread t2 = new Thread(t, "窗口3"); // 开启线程 t0.start(); t1.start(); t2.start(); } } class Ticket implements Runnable { private int number = 100; // 在类的成员位置,创建LOCK接口的实现类对象 private Lock lock = new ReentrantLock(); public void run() { while (true) { payTicket(); } } public synchronized void payTicket() {// 同步方法技术 // 对票数做判断,大于0 可以出售 // 调用lock接口方法lock获取锁对象 lock.lock();// 加锁 if (number > 0) { try { Thread.sleep(10);// 使用休眠,模拟CPU切换 System.out.println(Thread.currentThread().getName() + "出售第" + number--); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock();// 无论有没有异常 都会解锁 } } } }