解决方案 »

  1.   

    main方法应该修改为
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            ThreadDemo td = new ThreadDemo()
            Thread t1 = new Thread(td);
            t1.setName("线程1");
            Thread t2 = new Thread(td);
            t2.setName("线程2");
            t1.start();
            t2.start();
        }你的代码写的两个线程根本没有共享数据,还同步个啥?
      

  2.   

    你的意思应该,两个线程共同操作ticket这个变量,但是你的ticket变量是你的ThreadDemo类的非静态成员变量,这样你创建的每个ThreadDemo对象都有自己ticket,它们都在操作自己ticket,实际上没有共享,所以你把ticket声明为static试试,这样各个ThreadDemo对象所操作的就是同一个ticket啦~
      

  3.   

    public synchronized void sale()
        {
                if(ticket>0)
                {
                    System.out.println(Thread.currentThread().getName()+"号窗口卖出"+this.ticket--+"号票");
                }
        }synchronized上的锁是什么?知道这个你就知道为什么不同步了。推荐看下http://blog.csdn.net/xiaohulunb/article/details/38894109