class Move implements Runnable
{
    Thread zhang,keven;
    Move()
    {
       zhang=new Thread(this); 
       zhang.setName("张名");
       keven=new Thread(this);
       keven.setName("Jam.keven");
    } 
    public void run()      
    {   
       int i=0;
        while(true)
         {
           if(Thread.currentThread()==zhang) 
            {  
               i=i+1;
               System.out.printf("%s线程的局部变量i=%d\n",zhang.getName(),i);
               if(i>=8)
                  { 
                     System.out.printf("%s线程进入死亡状态\n",zhang.getName());
                     return;
                  }
            } 
           else if(Thread.currentThread()==keven) 
            {
               i=i-1;
               System.out.printf("%s线程的局部变量i=%d\n",keven.getName(),i);
               if(i<=-20)
                  { 
                     System.out.printf("%s线程进入死亡状态\n",keven.getName());
                     return;
                  }
            } 
         try{
              Thread.sleep(800);
            }
        catch(InterruptedException e)
            {
            }
        }
    }
}
class Example
{
    public static void main(String args[ ])
    {
        Move move=new Move();
        move.zhang.start();
        move.keven.start(); 
    }
}这是源代码,为什么我把while(true)去掉后 这两个线程只能各自执行一次?我感觉这两个线程的循环执行和while(true)
没有关系啊 只要执行run()方法 就可以正常的循环 并不需要while(true)啊 谁能告诉我是怎么回事 这个while(true)
究竟在线程中起的是什么作用?

解决方案 »

  1.   

    线程启动的时候,run方法被调用一次,如果run方法退出,意味着线程结束。所以,在线程的run方法中用while循环来反复的执行逻辑是最常见的一种处理方式。
      

  2.   

    线程是有生命的 最后会dead的 必需循环使用 也要看什么情况
      

  3.   

    move.zhang.start();
    当线程启动时,自动调用run()方法,while(true)保证线程不断执行,
    你也可以自己定义判断条件,通常用来控制线程class Move implements Runnable {  .....  private  boolean running = true;  public void run() {
        while(running) {
          //do something
        }
      }  public boolean isRunning() {
        return running;
      }  public void setRunning(boolean running) {
        this.running = running;
      }
      ....
    }
      

  4.   

      你其实还没理解线程的意思.线程是程序的另一个执行线路.就像 main()方法一样.定义两个子线程后,这个程序相当于有三条执行路径,分别来占用CPU 来执行各自的代码.如果不用while(true)其实线程就只执行了一次.就像main()方法一样.
    如果在一个main()方法里写这样一段代码.
     main(string args[]){
         int i = 0 ;
          while(true){
            i++;
            if(i<8)
             system.out.println("this is the main()");
              
          }
      }如果把while(true)去掉 main()方法也只执行一次.
    run()方法和main()方法的执行过程是一样的.只是它们在轮流的占用CPU 在各自执行自己的代码.
      

  5.   

    一个线程的运行是有生命的周期的
    主要体现在run()方法中  一旦run()的方法执行完毕线程对应的就会停止执行 
    回收对应的内存,cpu 就会停止对其进行运算直到下次创建并重复调用该线程类至于while(true){}
    中的内容被看做是重复执行的  只有程序终止 或者被打断才会停止执行