黑马程序员技术交流社区

标题: java多线程 [打印本页]

作者: 〃Mr.Zぐ    时间: 2013-4-19 14:01
标题: java多线程
、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取其他值时,没有这种现象?
作者: 刘兆华    时间: 2013-4-21 16:09
首先 我想说一下 , 你这个操作Top成员变量(属于多线程共享数据)   没有使用Synchronized()   首先就是不安全。 你多运行几次  你看看有没有TOP小于零的情况   至于你说的取其他值线程的其他现象  这个问题我想跟你说,你的多线程不扎实,  多线程  哪个线程拿到CPU执行权 哪个就会运行 而你所说的按顺序只是一个巧合,你多运行几次 结果不可能像你说的那样按照顺序执行
作者: 夏凡    时间: 2013-5-2 22:33
这个跟top的取值应该是没有关系的吧,每次运行现象都不一样的
作者: jinhu358    时间: 2013-5-4 16:57
1楼说的很对,因为你这里使用的是同一个对象中的值,而且多个线程都在操作这个值,所以你先要使用同步锁,再一个,你这里线程的执行顺序,都是取决于cpu时间片,也就是线程拿到CPU执行权




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