看了一个程序,动手改了一下可是却无法实现同步,如下:
class SellTickets{
public static void main(String[] args)
{
Sell s1=new Sell();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
}
}class Sell implements Runnable 
{
int i=100;

public void run()
{
String str="yes";//按道理应该不会同步,可是却能实现????奇怪?下面换一下改为:String str="yes"+i后不能同步?两者有区别吗?
while(true)

   synchronized(str)
              {
      if(i>0)
       {
Thread.yield();
    System.out.println(Thread.currentThread().getName()+"sell tickets: "+i--);
        }
if(i<=0)
break;
     }
}
}
多谢大虾指导!!

解决方案 »

  1.   

    synchronized(str)
                  {
          if(i>0)
           {
    Thread.yield();
        System.out.println(Thread.currentThread().getName()+"sell tickets: "+i--);
            }
    if(i<=0)
    break;
         }把synchronize 单独拿出来做一个函数会不会好?
      

  2.   

    这样肯定不会有问题了,它用的是this监听器当然不会有问题了,关键是上面程序的实现监听器的对象是变化的,按道理不会同步了,是吧?
      

  3.   

    synchronize运用的应该是对象吧,i不是对象,只是基本类型,所以不能同synchronize。
    呵呵,个人理解