如果在线程t1中创建线程t2,那么是否要等t2结束后t1才能结束?我手头上的几本java入门书怎么都没提啊?(还是我没找到?)BTW问一下线程的结束条件

解决方案 »

  1.   

    t1不需要等t2结束,自己可以提前结束。
    线程的结束条件为run方法执行结束。
    结束的方式可以是一个正常的return,也可以是执行到最后一条语句,
    也可以是有未捕获的异常导致的退出。
      

  2.   

    谢谢各位!好象stop也可以结束线程,另外,main肯定要等所有线程都结束吧
      

  3.   

    让线程结束运行的方法有以下几种:
    (1)一般线程中run()方法运行结束后,线程自动结束。所以只要让程序执行完run方法,线程就会自动结束。
    (2)还有可以产生异常让线程结束。当我们要求线程在某个条件满足时结束,这时我们可以在该条件满足后,用throw 方法抛出一个InterruptedException异常结束线程。
    (3)当我们要用别的一个线程来控制本线程的生命shi,我们可以通过设置中断标志来达到目的!我们可以通过interrupt方法来设置中断标志位。然后再run方法中通过检查中断标志位来进行控制!
        Run()
    {
       While(is or no interrupted && more work to do)
    {
    }
    }
    中断调用如sleep,wait方法都会设置中断标志位,当线程的标志位为true时,调用sleep,wait,interupt方法都会抛出一个interrupted异常!这为我们唤醒一个处于sleep 状态的线程提供一种方法.因为在睡眠状态的线程是不会自己结束自己的且没有现成的方法来唤醒它知道它超过睡眠时间。当我们要在其睡眠期间唤醒它对其进行一系列操作,那么我们可以调用interupted方法,这时就会产生一个interrupted异常,从而达到唤醒其的目的!
    楼上的疑问比较奇怪,可能概念没有搞清楚。各个线程不是包含的关系,它是一种父子关系(可能不是很全面主要正对楼上的问题)。一个线程可以产生另一个现程,一个叫做父线程,一个叫做子线程。他们都是线程阿。就像你父亲生了你,你们都属于人类。你不能说我们都是人,怎么可以人生人呢!呵呵!
      

  4.   

    stop()方法已经不提倡使用了!
     该方法都已经被废除。废除stop()方法的原因是因为它会破坏对象的事物执行。我们可以通过stop()方法来结束一个线程的运行。但是我们不知道什么时候结束线程是安全的。因为线程的执行是不受我们控制的,我们假设一个线程正在执行一个数据库操作事务,而这时我们调用stop()来结束它,就有可能产生数据错误,比如说银行的转帐事务。