
* @Description模拟用户网络购票
*/
public class TicketThread implements Runnable{
private int ticket=10;//记录车票总数
private int num=0;//记录用户抢到了几张票
//用户抢票
public void run(){
while (true){
//没有余票,跳出循环
if (ticket<=0){
break;
}
//有余票,则抢票。第一步:修改车票数:总票数再抢完票后减一张,用户抢到票了,抢票数+1
ticket--;
num++;
//模拟网络延迟
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//第二步:显示出票反馈给用户
System.out.println(Thread.currentThread().getName()+"抢到了第"+num+"张票,剩余"+ticket+"张票");
}
}
public static void main(String[] args) {
Runnable runnable=new TicketThread();
Thread t1=new Thread(runnable,"淘票票");
Thread t2=new Thread(runnable,"快手张");
Thread t3=new Thread(runnable,"黄牛党");
System.out.println("*******各方开始抢票******");
t1.start();
t2.start();
t3.start();
}
}

发现问题:
不是从第1张票开始
存在多人抢一张票的情况
有些票号没有被抢到
多个线程操作同一个共享资源时,将引发数据不安全问题
原因:多线程共同操作数据时,引发的冲突(如延迟时,操作未全部完成等等)
这里就需要用到线程同步来解决这个问题
569

被折叠的 条评论
为什么被折叠?



