方法简单解释
该方法的功能就是判断当前的线程是否处于活动状态,那么什么是活动状态呢,活动状态就是线程已经启动且尚未终止,当线程正在运行或着准备开始运行的时候,就认为线程是“存活”的,并且以true和false的形式返回,下面举个小栗子:
package MyThread;
public class mythread extends Thread{
@Override
public void run() {
System.out.println("run="+this.isAlive());
}
}
package test;
import MyThread.mythread;
import MyThread.CountOperate;
public class Run {
public static void main(String[] args) {
mythread my=new mythread();
System.out.println("开始:"+my.isAlive());
my.start();
System.out.println("结束:"+my.isAlive());
}
}
运行结果:
在这里需要注明一点,可以看到结束的时候是true,但是这个值是不确定的,之所以是true是因为mythread这个线程还没有执行完毕,所以才是true,我们简单的更改一下:
直接加上Thread.sleep(1000)即可观察出区别了
可以看到结束的时候已经变成了false,因为mythread这个线程在一秒内已经执行完毕了
另外,再注意一点,在使用isAlive()方法的时候,如果将线程对象以构造参数的方式传递给Thread对象进行start()启动的时候,运行的结果和前面的示例是有差异的,造成这种差异的原因归根到底还是来自于Thread.currentThread()和this的差异,在这里举个例子解释一下:
package MyThread;
public class CountOperate extends Thread{
public CountOperate() {
System.out.println("构造方法里——测试开始");
System.out.println("Thread.currentThread().getName="+Thread.currentThread().getName());
System.out.println("Thread.currentThread().isAlive()="+Thread.currentThread().isAlive());
System.out.println("This.getName="+this.getName());
System.out.println("This.isAlive="+this.isAlive());
System.out.println("构造方法测试结束");
}
@Override
public void run() {
System.out.println("run方法里——测试开始");
System.out.println("Thread.currentThread().getName="+Thread.currentThread().getName());
System.out.println("Thread.currentThread().isAlive()="+Thread.currentThread().isAlive());
System.out.println("This.getName="+this.getName());
System.out.println("This.isAlive="+this.isAlive());
System.out.println("run方法结束");
}
}
package test;
import MyThread.mythread;
import MyThread.CountOperate;
public class Run {
public static void main(String[] args) {
CountOperate c=new CountOperate();
Thread t1=new Thread(c);
System.out.println("main begin t1 isAlive="+t1.isAlive());
t1.setName("A");
t1.start();
System.out.println("main end t1 isAlive="+t1.isAlive());
}
}
运行结果: