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

无法实现的同步多线程购票系统,郁闷
结果有买到同样票的和0的情况……求解,why?
public class Shop 
{
public static void main(String[] args) 
{
Outer o=new Outer();
o.getSale("s1:").start();
o.getSale("s2:").start();

}

}

class Outer
{
private  int ticket=20;

public  Thread getSale(String s)
{

return new Sale(s);
}

private class Sale extends Thread
{
 Sale(String s) 
{
super(s);
}


public synchronized void run()
{
//int tmp=ticket;
while(ticket>0)
{
try {
sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(getName()+" ticket "+ticket--);
//ticket=tmp;
}
}
}
}

------解决方案--------------------
package cn.dzr.thread;

public class SocketTest
{
    public static void main(String[] args) 
    {
        Outer o=new Outer();
        o.getSale("s1:").start();
        o.getSale("s2:").start();
         
    }
     
}
 
class Outer
{
     
     
    public  Thread getSale(String s)
    {
         
        return new Sale(s);
    }
     
    private class Sale extends Thread
    {
         Sale(String s)