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

各位大神~跪求~线程中同步锁的问题~(同步代码块)
我的代码是:
  package thread;
 class qi implements Runnable{
      private static int num=100;
      Object oj=new  Object();
  public void run() {
   while(true){
         synchronized(oj){
   if(num>0){//try{Thread.sleep(10);}catch(Exception e ){}
          System.out.println(Thread.currentThread().getName()+"sale_number"+num--)
  }
  }
                  }
  }
 
 
 }
 public class ThreadDemo7 {
   public static void main(String[]  args)
   {
    qi q=new qi();
    qi q1=new qi();
    qi q2=new qi();
    Thread t3=new Thread(q2);
    Thread t1=new Thread(q);
    Thread t2=new Thread(q1);
    t1.start();t2.start();t3.start();  
   }
 }
 为什么到最后的运算结果不是从0到100的  但是加上了  sleep就是达到了从0到100   同步锁本来不是就是解决线程运行先后顺序的问题吗?为什么 还是会出错捏??

------解决方案--------------------
你3个线程用的不是一把锁,当然控制不了了啊.

Object oj=new  Object();
改成
public static Object oj=new  Object();
------解决方案--------------------
qi q=new qi();
    qi q1=new qi();
    qi q2=new qi();
    Thread t3=new Thread(q2);
    Thread t1=new Thread(q);
    Thread t2=new Thread(q1);


你这里创建了三个qi  对像,synchronized锁住的是同一个对像(不是三个对像).要想解决这个问题,就像一楼说的,

public static Object oj=new  Object(); oj设置为静态的。