首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

各位大神~跪求~线程中同步锁的有关问题~(同步代码块)

2013-04-20 
各位大神~跪求~线程中同步锁的问题~(同步代码块)我的代码是:package thread class qi implements Runnabl

各位大神~跪求~线程中同步锁的问题~(同步代码块)
我的代码是:
  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设置为静态的。

热点排行