黑马程序员技术交流社区
标题:
问个问题
[打印本页]
作者:
进击的大鹏
时间:
2014-9-11 21:50
标题:
问个问题
class Ticket implements Runnable
{
int ticket=100;
public void run(){
while(true){
if(ticket>0){
i--;
System.out.println(Thread.currentThread().getName()+"..."+ticket);
}
}
}
}
class ThreadDemo3
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
为什么运行结果,有两个98而没有99
作者:
雨夜忧伤
时间:
2014-9-12 01:42
随机的,多运行几次,CPU要在线程中快速切换!
同步下看看!
作者:
犹豫铅笔
时间:
2014-9-12 01:51
i--?,应换成ticket--吧。应该是线程安全问题,出现上诉的原因,可能是当ticket的值等于99时,t1刚好走到System.out.println(Thread.currentThread().getName()+"..."+ticket);这句话但还没执行,此时CPU的控制权被其它线程抢到,这里假设被t3抢到,t3抢到后执行一次循环体后,ticket值为98了,打印了一次98,CPU控制权可能刚好又被t1抢到,此时ticket的值变为98了,于是又打印一次98
作者:
hailong
时间:
2014-9-12 10:34
i是哪里来的?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2