01 线程安全
多个线程同步访问共享资源时,导致原子性/可见性/有序性的问题,导致共享数据的不可预测性,超出预期的结果
如每次运行结果和单线程运行结果是一样的,且其他的变量的值也和预期一样
读是不会有线程安全问题的
产生原因
在多线程情况下,由于cup上下文切换,导致运行结果和期望一样
02 线程同步
当出现线程安全问题时 就需要让线程同步 , 即各线程之间要有个先来后到
线程同步的好处 解决了线程安全问题
线程同步的缺点 性能下降,可能会带来死锁
01 线程安全问题
使用继承Thread创建线程
一共有100张票 通过4个窗口卖完
问题所在 当ticket=1的时候
所有线程都执行到了Thread.sleep();
1号线程苏醒 把ticket减1 这时候ticket等于0
2号线程苏醒 把ticket减1 这时候ticket等于-1
3号线程苏醒 把ticket减1 这时候ticket等于-2
ticket就不可能为0,会出现负数
有可能出现卖相同的票
1号线程执行输出语句卖出10号票 刚执行完 还没有执行ticket--时
2号线程也执行了打印的语句 就出现了1号线程和2号线程卖相同的票