run 方法执行完了,线程就结束了,不需要人为退出
start方法在底层是调用run方法,所以,一般线程做事情都在run方法里面写

解决方案 »

  1.   

    是执行完void run()的代码就自动退出,还是要人为的使其退出?-> 执行完 void run() 的代码就自动退出;
     还有线程开始后如t.start();,它之后的代码是立即执行还是要到执行完void run()的代码之后再执行?-> t.start(); 之后的语句可能在 run() 代码前执行,也可能在 run() 执行后执行,如果语句比较多,那可能就和 run() 方法里的语句交叉执行了。
      

  2.   

    要让线程自然执行完成。如果线程需要时间比较长,一般是由于循环问题,所以要设置一个标记flag运行就让其为true,要让其停止就设置为false.
      

  3.   

    线程内部处理 加 ExecutorService.shutdown();
      

  4.   

    1楼误解。
    start没有调用run,而是调用其他方法(native方法)启动线程,而此启动的线程中间接调用Runnable的run方法。
    可以说,run方法的内容,基本上就是线程执行的内容了,其他内容是jvm附加上的,你也干预不了。
    run结束,不管是执行到最后一行,还是return,还是抛出异常,都会导致这个线程结束。
      

  5.   

    以前线程是有人为退出的,但很快,好像就是1.1,1.2版本的时候就不赞成使用了。所以线程中有循环,特别是无限循环的话,我一般都是通过判断一个变量是否为false,若为false了,那么就退出循序,线程也就自然终止了。
    t.start()启动线程后,之后的方法立即执行,不必等到run方法执行结束,否则线程也就没意义了
      

  6.   


    start
    public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 
    结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 
    抛出: 
    IllegalThreadStateException - 如果线程已经启动。
    另请参见:
    run(), stop()
    回家好好把书看看,native是由虚拟机调的,你编程要看虚拟机编程么?
      

  7.   

    有人为退出的方法,stop(),不过由于人为结束线程极易造成死锁,所以Java已经把类似的方法都deprecate了。程序员应该让线程自然结束(从run()方法中返回)。
      

  8.   

    就写在run方法里就行了吧,run完了就完了
      

  9.   


    public void run()
    {
       while(b)
       {
         //执行的代码。
       }}
    b 为false 线程停止。。
      

  10.   

    执行完run方法就自动退出了。
    start之后的代码与run的代码可以说是2个不同的线程,执行的顺序就看cpu了,各种情况都有可能的
      

  11.   

    stop()过时了,容易造成线程安全,不要用
      

  12.   

    没有安全问题的就直接用stop很好用 
      

  13.   

    run()方法执行完以后该线程就会自动退出,不过也可以在run()方法里面设置一些标志位来控制退出;
    第二个问题楼主需要理解多线程的含义,当一个线程开始运行时,也就是t.start()之后,后面的代码会作为另外一个线程运行,此时,前后两个线程会分享CPU的时间片,正常情况下应该会交替运行.
      

  14.   

    线程怎么执行和什么时候执行的问题得去问操作系统的实现,在不同的实现上是不同的
    比如在windows和solaris下用的就是所谓的轻量级进程的概念,线程是建立在进程里面的一个调度、执行单元,而在linux下线程的实现和进程完全一样,只是线程之间共享内存空间等一些资源
    而在java中使用之需要知道run()方法结束后线程就中止了就行了,至于怎么结束那是操作系统的事情,和我们应用程序员没有关系
      

  15.   

    是的。t.stop();这个方法现在不提倡了,你可以通过给t=null让它不可用。