本帖最后由 relicemxd 于 2014-11-26 12:38:38 编辑

解决方案 »

  1.   


    //楼主的第二种情况是如下使用匿名对象吧???
    Thread t1 = new Thread(new Ticket()); 
     Thread t2 = new Thread(new Ticket());如果是这样的话,实际还是new出了两个对象,每个匿名对象里都有实例参数ticket,两个线程各自对一个匿名对象在操作,所以,并没有共享(两个对象)
      

  2.   

    楼主说的匿名对象是指?        Thread t1 = new Thread(new Runnable() {
                private int tick = 20;
                @Override
                public void run() {
                    while (true) {
                        if (tick > 0)
                            System.out.println(Thread.currentThread().getName() + " Ticket: " + tick--);
                        else
                            break;
                    }
                }
            });上面的方式,相当于每个线程都有20张票了,线程间没有共享了
      

  3.   


    是的就是这种情况:
    Thread t1 = new Thread(new Ticket()); 
     Thread t2 = new Thread(new Ticket());
      

  4.   


    是的就是这种情况:
    Thread t1 = new Thread(new Ticket()); 
     Thread t2 = new Thread(new Ticket());楼主,这样不行,这相当于你定义了两个对象,而这两个对象会各自有20张票。new Thread(t)这个对,是因为t1,t2都是根据一个对象t创建的线程。所以票就共享了。