黑马程序员技术交流社区

标题: 同步函数,把run改成同步为什么变成一个线程再跑 [打印本页]

作者: daoyua    时间: 2014-1-9 22:07
标题: 同步函数,把run改成同步为什么变成一个线程再跑
本帖最后由 daoyua 于 2014-1-10 16:27 编辑

public  synchronized void run(){
  
  while(num>0){
    if(num>0){
      System.out.println(Thread.currentThread().getName()+"同步函数"+num);
      num--;
     
     }
    }
  }
class Test  
{
public static void main(String args[])
{
  Demo d1=new Demo();
  Thread t1=new Thread(d1);
  Thread t2=new Thread(d1);
  
  t1.start();
t2.start();
}
}
作者: daoyua    时间: 2014-1-9 22:09
代码重新发下class Demo implements Runnable
{
        int num=100;
public  synchronized void run(){
               
                while(num>0){
                                if(num>0){
                                                System.out.println(Thread.currentThread().getName()+"同步函数"+num);
                                                num--;
                                       
                                }
                }
}
}
class Test  
{
        public static void main(String args[])
        {
                Demo d1=new Demo();
                Thread t1=new Thread(d1);
                Thread t2=new Thread(d1);
               
                t1.start();
                t2.start();
        }
}
作者: wodenhaowzg    时间: 2014-1-10 04:25
你将run方法加上锁以后,在同一时间就只能一个线程去执行方法内的代码,并且执行完出来后其他线程才能进去。
你的while循环设置的条件是num>0。。就是说不论t1或t2哪个线程进来,肯定是输出完这100条语句才能出去,而外面的线程同时也进不来,就造成了一个线程在跑的假象。
其实t1和t2两个线程都启动了,只是在外面的线程没有机会执行循环内的代码了。
归根结底:while循环条件设置错误。




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