java多线程售票程序中,票数大于6000时,票数打印出错。请教哪里出错了

java多线程售票程序中,票数大于6000时,票数打印出错。请问哪里出错了?
/*
 * 售卖票,可多个窗口同时卖的Runable实现方式
 */
class RTick implements Runnable

private  int tick = 6000;  //票数,5000以下试过都正常
Object obj = new Object();
public void run()
{
while(true)
{
//这时的obj对象起开关作用,就像一个锁
synchronized (obj) {
if(tick > 0)
{
System.out.println(Thread.currentThread().getName() + " sale " +tick--);
}
}
}
}
}
public class RTickDome {
public static void main(String[] args)
{
RTick rt = new RTick();
Thread t1 = new Thread(rt);
Thread t2 = new Thread(rt);
Thread t3 = new Thread(rt);
Thread t4 = new Thread(rt);

t1.start();
t2.start();
t3.start();
t4.start();
}
}

------解决思路----------------------
试了下。6000只能减到4056。。。。 还真奇怪。。
帮不了你了,不过有个建议,你这是个死循环了,这里可以改一下:

while(true){
synchronized (obj) {
if(tick > 0)
System.out.println(Thread.currentThread().getName() + " sale " +tick--);
else
break;
}
}

------解决思路----------------------
关于6000的问题,好像没什么错吧。只到4056是因为console的日志已经被冲掉了。

Run configurations-》Common-> Log to files.
------解决思路----------------------
程序没问题~那是控制台就能显示那么多数据,你不用换行你就发现数据正确了~但你最好在 
 if(tick > 0){
            System.out.println(Thread.currentThread().getName() + " sale " +tick--);
} else{
        break;
}
       有个关闭循环的要不就无线死循环了