请教一个java线程的问题
首先有个mainthread,它的run函数是这样的: 
 public   void   run() 
 { 
                   while(true) 
                   { 
                                  if(!down.isAlive()) 
                                  { 
                                                 System.out.println( "begin "); 
                                                 down.start(); 
                                  } 
                                  Sleep();//里面实现了,睡眠1秒中的功能 
                   } 
 } 
 down对象也是一个线程,它的run函数会输出一个字符串,然后结束   
 实际运行结果: 
 第一次while循环时,begin和down对象里的run函数里的信息都会输出 
 之后的每次while循环只输出begin字符串(说明mainthread的while(true)一直在运行的,而且也进入到if语句中去了),但是没运行到down的run函数里 
 不知道怎么回事?java的线程机制就是这样的吗? 
 问题非常急,谢谢,分数不够,可以尽管提
------解决方案--------------------A thread is alive if it has been started and has not yet died.  
 线程已经死掉了,当然不能执行
------解决方案--------------------应该是一个Thread对象只可以启动一次 
------解决方案--------------------polarman(北极人http://blog.csdn.net/polarman)      
    应该是一个Thread对象只可以启动一次     
 应该就是polarman不是说的,线程已经启动了,在掉多少次启动都没用了   
 你可以44,在睡眠后 停掉 down 线程,看有没有打印就好了          
------解决方案--------------------不知道局部变量能不能满足lz的要求   
 while(true) 
       { 
            Thread down=new Thread();//将Thread换成你自己的线程 
            if(!down.isAlive()) 
            { 
                 System.out.println( "begin "); 
                 down.start(); 
            } 
            Sleep();//里面实现了,睡眠1秒中的功能 
       } 
------解决方案--------------------public   void   run()  
{  
           while(true)  
           {  
                     if(!down.isAlive())  
                     {  
                               System.out.println("begin");  
                               down = new DownThread(); //new a thread again
                               down.start();  
                     }  
                     Sleep();//里面实现了,睡眠1秒中的功能  
           }  
}  
------解决方案--------------------线程在sleep的时候没有被释放,只是等待一段时间
start()方法只是运行一次,多次调用没有效果吧
一个线程的run()方法执行完以后,或者return出来以后,这个线程就中止了
所以要重新启动一个线程,应该是new一个新的线程
------解决方案--------------------原来那个对象虽然还在,但是由于没有其他引用引用这个对象,所以在下一次垃圾回收的时候,应该会被系统回收掉的,所以也没什么不爽的。
sleep是让线程睡眠,也就是不占用cpu时间,interrupt是给线程发终止信号,线程收到后就中断停止,占有的资源都会释放
LZ所指的占有资源是什么?是共享内存资源吗?如果一开始线程不用synchronized锁住共享内存资源,那么就不存在释放不释放的问题。每个线程都有自己独立的栈,也就是threadlocal,线程会把共享资源复制一个到自己的栈中,所以如果不锁住资源,就不会存在释放资源一说。
如果LZ所说的释放资源是指垃圾回收,那就要看在线程外是否还有引用在引用该线程所创建的对象。
------解决方案--------------------我现在为了实现我原先的功能,没用down.start()这个语句了,直接用down.run()这么调用了。  
 我以前4过了,如果你直接用down.run()你顶多属于调用方法,不能算是个线程,好象要实现线程必须调用down.start()