想实现多地区买票,直至票数从100减到0.大家帮忙看看这个程序哪错了!public class Test3 { public static void main(String[] args)throws Exception {
Tickages a=new Tickages();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();

}}
class Tickages implements Runnable
{
int tickages=100;

public void run()
{
while(true)
{

if(tickages>0 )
{System.out.println(Thread.currentThread().getName()+"tickages"+tickages);
tickages--;
}
}
}

}

解决方案 »

  1.   

    Tickages被并发访问,需要同步public void run(){
        while(true){
        
            synchronized(this){
                if(tickages>0 ){
                    System.out.println(Thread.currentThread().getName()+"tickages"+tickages);
                    tickages--;
                }
            }
            Thread.currentThread().sleep(100);//休眠一下
        }
    }
      

  2.   

    int tickages=100;
    每new一个对象就有100张,你new四个就400张另外100张走完后你就是死循环了
      

  3.   

    如二楼,你run方法没有跳出的条件啊,而且这四个thread根本不是共享一个票数~~~~~
      

  4.   

    用Runable接口实现的不是可以共享吗?怎么会每new一个就定义100张票呢。
    Thread.currentThread().sleep(100);//休眠一下
    这句话又有什么用呢?
      

  5.   


    LZ只new了一个Runnable对象,怎么成400张了。
      

  6.   


    这句话就是让当前正在执行的线程休眠100毫秒,这样才有模拟的效果还有如3L所说,没有跳出条件,应该加一句
    if(tickages==0)
        break;