日期:2014-05-20  浏览次数:20565 次

一个初级线程的问题,望高手解决一下-_#
一般来说对于下面的这段代码:
class   TicketSystem
{
public   static   void   main(String[]   args)
{
SellTicket   st   =   new   SellTicket();

new   Thread(st).start();
new   Thread(st).start();
new   Thread(st).start();
new   Thread(st).start();
}
}

class   SellTicket   implements   Runnable
{
int   tickets   =   100;
public   void   run()
{
while(true)
{
if(tickets   >   0)
{
System.out.println(Thread.currentThread().getName()   +   "   sell   ticket:   "   +   tickets);
tickets--;
}

}
}
}
出来的结果应该是:
Thread-0   sell   ticket:   100
Thread-0   sell   ticket:   99
Thread-3   sell   ticket:   98
...
Thread-1   sell   ticket:   1
但是我这里出来的结果却是:
Thread-0   sell   ticket:   10
Thread-0   sell   ticket:   99
Thread-3   sell   ticket:   99
Thread-3   sell   ticket:   98
Thread-2   sell   ticket:   99
Thread-2   sell   ticket:   96
Thread-2   sell   ticket:   95
...
Thread-1   sell   ticket:   7
Thread-3   sell   ticket:   8
Thread-0   sell   ticket:   5
Thread-0   sell   ticket:   4
Thread-0   sell   ticket:   3
Thread-2   sell   ticket:   6
Thread-1   sell   ticket:   1
Thread-3   sell   ticket:   2
看孙鑫老师的教程没问题。人家的代码和我的一样,可是我的这个结果。。。
迷茫了半天了,请各位帮个忙吧。谢谢了!

对了,我这里用的是SUN公司的JDK   1.6.0_02。

------解决方案--------------------
class TicketSystem {
public static void main(String[] args) {
SellTicket st = new SellTicket();

new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}

class SellTicket implements Runnable {
int tickets = 100;

public synchronized void run() {
while (true) {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName()
+ " sell ticket: " + tickets);
tickets--;
}

}
}
}