黑马程序员技术交流社区

标题: 线程同步问题 [打印本页]

作者: 苑桥别馆    时间: 2014-12-4 22:37
标题: 线程同步问题
  1. <p>class Runs implements Runnable//实现接口
  2. {
  3.         private int i=10;
  4.         public void run(){//复写run()方法
  5.                 boolean flag=true;
  6.                         while(flag){
  7.                                 synchronized(new Object()){//同步代码块
  8.                                 if(i>0){
  9.                                         try{Thread.sleep(10);}
  10.                                                 catch(Exception e){}
  11.                                         System.out.println(Thread.currentThread().getName()+"--"+i--);
  12.                                 }else
  13.                                         flag=false;
  14.                         }
  15.         }
  16. }
  17.                
  18. };
  19. class Main
  20. {
  21.         public static void main(String[] args){
  22.                 Runs run=new Runs();//建立Runnable子类对象
  23.                 Thread t1=new Thread(run);//将Runnable子类对象作为Thread的构造方法  建立对象
  24.                 Thread t2=new Thread(run);
  25.                 Thread t3=new Thread(run);
  26.                 Thread t4=new Thread(run);
  27.                
  28.                 t1.start();
  29.                 t2.start();
  30.                 //t3.start();
  31.                 //t4.start();
  32.         }
  33. };</p>
复制代码

我已经使用了同步机制,为什么 还会打印“0”呢?


作者: kerner    时间: 2014-12-4 23:00
你不是用的同一把锁啊,
作者: 苑桥别馆    时间: 2014-12-4 23:19
kerner 发表于 2014-12-4 23:00
你不是用的同一把锁啊,

怎么不是了
作者: kerner    时间: 2014-12-4 23:33
苑桥别馆 发表于 2014-12-4 23:19
怎么不是了

  synchronized(new Object()){//同步代码块
每个线程不是同一把锁。
作者: yangyujoe    时间: 2014-12-4 23:45
你用匿名对象,每个线程都会new 一个对象,所以锁的对象不一样,就不是同一把锁
作者: 返璞归真    时间: 2014-12-4 23:49
你加的锁是我见过最有个性的,哈哈{:2_36:}
作者: chudaming213    时间: 2014-12-6 13:00
你每次开启一个新的线程,都用new object新建一个对象作为锁,所以每次所用到的锁是不同的.
作者: 苑桥别馆    时间: 2014-12-7 14:33
chudaming213 发表于 2014-12-6 13:00
你每次开启一个新的线程,都用new object新建一个对象作为锁,所以每次所用到的锁是不同的. ...

谢谢回答  已经明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2