A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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();
}
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
代码重新发下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();
        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
你将run方法加上锁以后,在同一时间就只能一个线程去执行方法内的代码,并且执行完出来后其他线程才能进去。
你的while循环设置的条件是num>0。。就是说不论t1或t2哪个线程进来,肯定是输出完这100条语句才能出去,而外面的线程同时也进不来,就造成了一个线程在跑的假象。
其实t1和t2两个线程都启动了,只是在外面的线程没有机会执行循环内的代码了。
归根结底:while循环条件设置错误。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马