模拟卖票案例
创建三个线程,同时开启,对共享的票进行出售
public class Demo01Ticket {
public static void main(String[] args) {
//创建Runnable接口的实现类对象
RunnableImpl run = new RunnableImpl();
//创建Thread类对象,构造方法中传递Runnable接口的实现类对象
Thread t0 = new Thread(run);
Thread t1 = new Thread(run);
Thread t2 = new Thread(run);
//调用start方法开启多线程
t0.start();
t1.start();
t2.start();
}
}
package day15;
//实现卖票案例
public class RunnableImpl implements Runnable {
//定义一个多线程共享的票源
private int ticket = 100;
//设置线程任务:卖票
@Override
public void run(){
//提高安全问题出现的概率,使用睡眠
while(true){
if(ticket > 0){
//使用死循环,让卖票操作重复执行
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//票存在,卖票ticket---
System.out.println(Thread.currentThread().getName() + "---->正在卖第" + ticket);
ticket--;
}
}
}
}
结果:出现线程安全问题。
/*
Thread-1---->正在卖第7
Thread-2---->正在卖第4
Thread-1---->正在卖第4
Thread-0---->正在卖第4
Thread-2---->正在卖第1
Thread-1---->正在卖第1
Thread-0---->正在卖第1
*/