你这是线程不安全的。
while(true)
{
if(tickets>0)
System.out.println(Thread.currentThread().getName()+"---"+tickets--);
}
当t1.start();
t2.start();
执行时,假如t1运行run方法执行
执行完了if(tickets>0) 这句,而未执行System.out.println(Thread.currentThread().getName()+"---"+tickets--);,此时tickets =100并且此时CUP把执行权交给了t2,t2再执行完run方法时,t1,t2都会打印出100;
极端点是t1,t2,t3,t4都会打印出100。要想解决的话就加个锁,即:
synchronized (this) {
while(true)
{
if(tickets>0)
System.out.println(Thread.currentThread().getName()+"---"+tickets--);
}
}
希望可以帮助你~
|