回 帖 发 新 帖 刷新版面

主题:[讨论]怎么终止一个线程?

class T1{
    
    public static void main(String[] d)throws Exception
    {
        Thread t1=new Thread(new T2());
        Thread t2=new Thread(new T2());
        Thread t3=new Thread(new T2());
        t1.start();
        t1.interrupt();
        t2.start();
        t3.start();
        System.out.println(t1.isAlive()+" "+t2.isAlive()+t3.isAlive());
        
    }

}
class T2 implements Runnable{
        
    public T2()
    {
        
        
    }
    public  void run()
    {
        for(double a=0.00001;a<0.0001;a+=0.00001)
        {
                                           System.out.println(Thread.currentThread());
            System.out.println(Thread.currentThread());
            System.out.println(Thread.currentThread());
            System.out.println(Thread.currentThread());
            try{
                Thread.currentThread().interrupt();
            }catch(Exception e)
            {
                
            }
        }
    }
}
按理说在main()中执行完t1.interrupt()之后,t1就不应该再执行了,但为什么控制台中在t2.start()之后依然有有关t1线程的输出呢?

回复列表 (共3个回复)

沙发

interrupted
public static boolean interrupted()测试当前线程是否已经中断。线程的中断状态 由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。 

返回:
如果当前线程已经中断,则返回 true;否则返回 false。

isInterrupted
public boolean isInterrupted()测试线程是否已经中断。线程的中断状态 不受该方法的影响。 

返回:
如果该线程已经中断,则返回 true;否则返回 false。

isAlive
public final boolean isAlive()测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。 

返回:
如果该线程处于活动状态,则返回 true;否则返回 false。

start
public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 
结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。 

多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 


抛出: 
IllegalThreadStateException - 如果线程已经启动。
另请参见:
run(), stop()

run
public void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 
Thread 的子类应该重写该方法。 


指定者:
接口 Runnable 中的 run

板凳

这个涉及到CPU为各个线程分配时间片,多线程运行的特点

3 楼

楼上两位的意思是?如果一个线程已经启动,除非线程中的代码执行完毕,就没有别的方法使之停止吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册