多线程中的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
相比大家对这个结果就很清晰了把!!!