java多线程 isAlive方法的有趣现象

多线程中的isAlive方法相信大家都知道。无非就是当前线程如果是存活的,在运行中,则返回true,否则返回false,不过还是有些有趣现象的,我们这里用代码演示一下:

class TestThread extends Thread{

    @Override
    public void run() {
        System.out.println(this.isAlive());
        System.out.println(Thread.currentThread().isAlive());
    }
}
public class AliveTest {

    public static void main(String[] args){
        Thread t = new Thread(new TestThread());
        t.start();
//        t.run();
    }
}

上面代码结果:

false
true

修改上述代码为现在这样:

class TestThread extends Thread{

    @Override
    public void run() {
        System.out.println(this.isAlive());
        System.out.println(Thread.currentThread().isAlive());
    }
}
public class AliveTest {

    public static void main(String[] args){
//        Thread t = new Thread(new TestThread());
//        t.start();
        new TestThread().start();
//        t.run();
    }
}

结果变成:

true
true

造成这个差别的原因是什么呢?..其实很简单。。反正大家只要记住,isAlive方法返回true时,只有线程是通过start()方法启动的时候,说明这个线程是运行中的,他才会返回true.上面代码中第一段代码我们是把我们的TestThread对象传入Thread的构造中,然后用Thread启动线程的,所以this.isAlive()为false,因为启动线程的是Thread对象而不是TestThread对象,而Thread.currentThread()方法返回的就是当前线程对象,而第二段代码中我们是直接new TestThread().start()的,所以启动线程的对象就是TestThread,造成了this.isAlive()返回的true.我们在修改一下代码来看看:

class TestThread extends Thread{

    @Override
    public void run() {
        System.out.println(this.isAlive());
        System.out.println(Thread.currentThread().isAlive());
    }
}
public class AliveTest {

    public static void main(String[] args){
//        Thread t = new Thread(new TestThread());
//        t.start();
        TestThread t = new TestThread();
        t.run();
    }
}

结果是:

false
true

相比大家对这个结果就很清晰了把!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值