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();// 无论有没有异常 都会解锁
}
}
}
}