关于javase多线程的问题(初学者)

图片说明图片说明图片说明
第一张图是写的售票线程,第二张图是run运行的结果,第三张图是debug运行的结果,为何run和debug运行的结果不同?

从你的程序可以看出来,在判断flag的值的时候,程序并没有锁定,这时flag可能是true,之后才进入锁的过程,在debug模式的时候可能程序运行顺序比较单一,导致读取flag的值的时候已经是修改过的了

很正常呀 对于多线程 你再run一次都可能跟你刚才执行的结果不同 这个是由锁竞争引起的

不是你说的这个意思。我想问的是关于三个窗口显示票售空的问题,为什么run会显示3个而debug只会显示一个?

可能是线程2和线程3 在执行tickets>0的时候线程1已经把票卖完了并且把flag变成了false 这个时候 线程2和线程3就不会执行到打印票卖空的步骤

我想看看楼主的全部代码 有些东西我想不明白

很正常呀 对于多线程 你再run一次都可能跟你刚才执行的结果不同 这个是由锁竞争引起的