这是个模拟卖票的问题,使用一个对象实现Runnable接口建立四个线程,这个对象有100张票,四个进程同时卖,因为没使用锁,所以会出现负数票,但是为什么会出现相同的票呢?8号票卖了四次,是因为成员变量在if之后进栈保存了值?然后直接用这个num输出吗?
代码:
部分输出
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
System.out和num--是两个操作(而且这两个操作还不是原子操作,但这里先看成原子操作,比较好解释),那么,System.out输出数字后在还没num--时线程被抢占,抢占成功的另一个线程也执行到System.out,但是依旧还没执行num--,又被另一个线程抢占,以此类推,就可能得到4个8了。