线程安全问题的概述和线程安全的代码实现与问题产生的原理
作者:互联网
线程安全
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
我们通过一个案例,演示线程安全的问题:
电影院要买票,我们模拟电影院买票的过程。假设要播放的电影是"葫芦娃大战奥特曼"本次电影的座位一共100哥(本场电影只能卖100张票)
我们来模拟电影院的售票窗口,实现多个窗口同时卖“葫芦娃大战奥特曼”这场电影票(多个窗口一起卖着100张票)
需要窗口,采用线程对象来模拟;需要票,Runnable接口子类来模拟
public class RunnableImpl implements Runnable{
//定义一个多个线程共享的资源
private int ticket = 100;
//设置线程任务卖票
@Override
public void run() {
//使用死循环重复卖票动作
while(true){
//线判断票是否存在
if (ticket>0){
//票存在,卖票,ticket--
System.out.println(Thread.currentThread().getName()+"--->正在卖第"+ticket+"张票");
ticket--;
}
}
}
}
public class DemoTicket {
public static void main(String[] args) {
RunnableImpl r1 = new RunnableImpl();
new Thread(r1).start();
new Thread(r1).start();
new Thread(r1).start();
}
}
运行结果:
问题产生的原理
注意:
线程安全问题是不能产生的,我们可以让一个线程在访问共享数据的时候,无论是否失去了cpu的执行权,让其他的线程只能等待,等待当前线程买完票,其他线程在进行卖票
包证:使用一个线程在卖票
标签:Thread,卖票,安全,线程,new,概述,ticket,public 来源: https://www.cnblogs.com/ailhy/p/16457197.html