首先,多线程同时操作共享数据是,应该线程同步,并且如果你一定要用for语句,不应该再定义局部变量给成员变量x(共享数据)赋值,这样做的话,每个新启动的线程都会从第100张票开始卖,实际上重复售票了.
建议如下修改:
class sale implements Runnable
{
int x=1000;
public void run()
{
for (; x>0; )
{
synchronized(this){//同步代码块,同步操作共享数据的代码,保证结果正确
System.out.println(Thread.currentThread().getName()+"---"+(x--));
}
}
}
} |