单窗口卖票
一个窗口(单线程)卖100张票没有问题
单线程程序是不会出现线程安全问题的
多个窗口卖不同的票
3个窗口一起卖票,卖的票不同,也不会出现问题
多线程程序,没有访问共享数据...,不会产生问题
多个窗口卖相同的票
3个窗口卖的票是一样的,就会出现安全问题
多线程访问了共享的数据,会产生线程安全问题
线程安全问题代码实现
模拟卖票案例
创建3个线程,同时开启...线程安全问题产生原理图
分析:线程安全问题正常是不允许产生的,我们可以让一个线程在访问共享数据的时候,无论是否失去了cpu的执行权;让其他的线程只能等待,等待当前线程卖完票,其他线程在进行卖票...但是必须保证多个线程使用的锁对象是同一个。
锁对象作用:把同步代码块锁住,只让一个线程在同步代码块中执行。...,执行run方法,遇到synchronized代码块这时t1会检查synchronized代码块是否有锁对象
发现没有,t1就会进入到阻塞状态,会一直等待t0线程归还锁对象,t0线程执行完同步中的代码,