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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 〃Mr.Zぐ 中级黑马   /  2013-4-19 14:01  /  1817 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

、public class Multithreading {
  
   public static void main(String[] args)
   {
   Test he=new Test();
   new Thread(he).start() ;
   new Thread(he).start() ;
   new Thread(he).start() ;
   new Thread(he).start() ;
   new Thread(he).start() ;
   new Thread(he).start() ;
   new Thread(he).start() ;
   new Thread(he).start() ;
  
  
   }
  }
  class Test implements Runnable
  {
   int top=1;
   public void run()
   {
  
   while(top>0)
   {
   try{
   Thread.sleep(1);
   }catch(Exception e)
   {}
   System.out.println(Thread.currentThread().getName().toString()+“is running:top=“+top--);
   }
   }
  }
  
  
  为什么当top取值为1时,线程按顺序执行,top取其他值时,没有这种现象?

3 个回复

倒序浏览
首先 我想说一下 , 你这个操作Top成员变量(属于多线程共享数据)   没有使用Synchronized()   首先就是不安全。 你多运行几次  你看看有没有TOP小于零的情况   至于你说的取其他值线程的其他现象  这个问题我想跟你说,你的多线程不扎实,  多线程  哪个线程拿到CPU执行权 哪个就会运行 而你所说的按顺序只是一个巧合,你多运行几次 结果不可能像你说的那样按照顺序执行
回复 使用道具 举报
这个跟top的取值应该是没有关系的吧,每次运行现象都不一样的
回复 使用道具 举报
1楼说的很对,因为你这里使用的是同一个对象中的值,而且多个线程都在操作这个值,所以你先要使用同步锁,再一个,你这里线程的执行顺序,都是取决于cpu时间片,也就是线程拿到CPU执行权
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马