线程安全问题的概述和代码实现
线程安全问题的概述
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。
程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

线程安全问题的代码实现
class RunnaleImpl implements Runnable{ //定义一个多个线程共享的票源 private int ticket = 100; //设置线程任务:卖票 @Override public void run() { //使用死循环让卖票操作重复执行 while (true){ //判断票是否存在 if (ticket>0){ //提高安全问题出现的概率,让程序睡眠 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //票存在,卖票,ticket-- System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票"); ticket--; } } } }
public class Demo01Ticket { /** * 模拟卖票案例 * 创建3个线程,同时开启,对共享的票进行出售 */ public static void main(String[] args) { RunnaleImpl ru = new RunnaleImpl(); Thread t0 = new Thread(ru); Thread t1 = new Thread(ru); Thread t2 = new Thread(ru); t0.start(); t1.start(); t2.start(); } }

可以看到线程出现了卖相同票的,那么这个线程就出现了安全问题

浙公网安备 33010602011771号