isAlive() 方法的作用是判断当前的线程是否处于活动状态。

什么是活动状态呢?活动状态就是线程已经启动且尚未终止。线程处于正在运行或准备开始运行的状态,就认为线程是“存活”的。

例 1
下面通过一个案例来理解 isAlive() 方法判断线程是否活动的标准。假设 MyThread 线程类的代码如下:

public class MyThread extends Thread {@Override public void run(){ System.out.println("run="+this.isAlive());} }

如上述代码所示,MyThread 类的代码非常简单,只是在 run() 方法中调用 isAlive() 方法输出当前线程的活动状态。

下面编写启动 MyThread 线程的代码,具体实现如下:

public class Test {public static void main(String[] args){ MyThread myThread=new MyThread();//创建MyThread线程实例System.out.println("begin="+myThread.isAlive());//输出线程状态myThread.start();//启动线程System.out.println("end="+myThread.isAlive());//输出线程状态}
}

执行后的输出结果如下:

begin==false
end==true
run=true

在这里需要注意如下一行代码:

System.out.println("end=="+mythread.isAlive());

虽然在本示例中这行语句输出的值是 true,但此值是不确定的。输出 true 值是因为 mythread 线程还未执行完毕,所以输出 true。如果代码更改成如下形式:

public class Test {public static void main(String[] args) throws InterruptedException{ MyThread myThread=new MyThread();//创建MyThread线程实例System.out.println("begin="+myThread.isAlive());//输出线程状态myThread.start();//启动线程Thread.sleep(1000);//延时1000毫秒System.out.println("end="+myThread.isAlive());//输出线程状态}
}

再次运行主线程,此时的输出结果如下:

begin==false
run=true
end==false

此时 end 的返回值为 false,这是因为 myThread 对象已经在 1 秒之内执行完毕。

例 2
在使用 isAlive() 方法时,如果将线程对象以构造参数的方式传递给 Thread 对象进行 start() 启动,运行的结果和前面示例是有差异的。造成这样的差异的原因还是来自于 Thread.currentThread()this 的差异。下面通过一个案例来验证这一点。

(1) 首先创建案例所使用的线程类,具体代码如下:

public class MyThread extends Thread {public MyThread(){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("构造方法---结束");}@Overridepublic 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()方法---结束");}
}

(2) 接下来编写主线程代码,创建 MyThread 线程实例并启动线程。代码如下:

public class Test {public static void main(String[] args) throws InterruptedException{ MyThread myThread=new MyThread();//创建MyThread线程实例Thread t=new Thread(myThread);//创建一个线程System.out.println("main begin t1 isAlive="+t.isAlive());//输出线程状态t.setName("A");//设置线程名称t.start();//启动线程System.out.println("main end t1 isAlive="+t.isAlive());//输出线程状态}
}

程序运行结果如下:

构造方法---开始
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
构造方法---结束
main begin t1 isAlive=false
main end t1 isAlive=true
run()方法---开始
Thread.currentThread().getName()=A
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
run()方法---结束

isAlive()方法的作用相关推荐

  1. java thread isalive,《Java多线程编程核心技术(第2版)》 —1.4 isAlive()方法

    1.4 isAlive()方法 isAlive()方法的功能是判断当前的线程是否存活. 新建项目t7,类文件MyThread.java代码如下: public class MyThread exten ...

  2. Object的finalize()方法的作用是否与C++的析构函数作用相同

    Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...

  3. html语言中span,html元素span标签的使用方法及作用

    html元素 标签是一个没有任何语义的行内元素,不对设置任何样式,则不会有任何视觉效果.有关该标签的使用方法及作用详解如下: 标签的定义 标签属于行内元素,无任何特殊语义. 标签主要用于定义文本样式, ...

  4. getId()方法的作用

    getId() 方法的作用非常简单,就是取得正在运行线程的唯一标识. 如下代码演示了 getId() 方法的使用: public class Test15 {public static void ma ...

  5. python中tell_Python的File tell()方法使用方法及作用解析(实例)

    今天这篇文章我们来了解一下python之中的tell方法,在进入文章之前我们首先要知道pythontell()是什么,tell()它能用在python编程之中的什么地方,能够起到什么作用.这些东西我们 ...

  6. Java中intern()方法的作用

    一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: [java] view plaincopyprint? public stati ...

  7. PHP中的常见魔术方法功能作用及用法实例

    这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...

  8. 1.4 isAlive()方法

    方法isAlive()是判断当前线程是否处于活动状态. 线程代码: public class TestThread extends Thread{@Overridepublic void run() ...

  9. JAVA中String类的intern()方法的作用

    2019独角兽企业重金招聘Python工程师标准>>> 一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: [ja ...

最新文章

  1. android vlc eclipse,在Eclipse下导入vlc-android并编译
  2. python 多个变量赋值
  3. SpringMVC源码——未完待续
  4. idea 使用maven构建项目时,target bytecode version经常自动变化
  5. java-第九章-编写程序,打印如图案,要求图案的行数由用户输入.
  6. 2019 CCPC-Wannafly Winter Camp Div2 Day1
  7. IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
  8. 基于SpringBoot 2.3的WebService指南(包含案例)
  9. 从单机到集群会话的管理之集群模式一
  10. pytorch常见错误(持续更新)
  11. 对手机彩铃的一些想法
  12. My97DatePicker时间控件在asp.net的应用
  13. Linux(Ubuntu)虚拟机识别U盘
  14. oracle e-bussiness 简称
  15. iOS 摸鱼周报 #53 | 远程办公正在成为趋势
  16. 计算机网络汇聚层,【大白电气】接入层、汇聚层、核心层——中大型计算机网络系统结构介绍及交换机选型建议...
  17. win10用caffe训练自己的数据
  18. 企业购买团体商业保险有助提升公司形象
  19. Linux开机启动、bashrc、定时任务
  20. Javascript_ES5_学习笔记

热门文章

  1. BlockChain:互联网与区块链之间的那些事(P2P下载、P-CDN、分布式计算、社交媒体、P2P借贷、众筹、区块链、自组织)
  2. Ubuntu20.04中安装shutter
  3. python、numpy,keras,tensorflow等函数用法积累(持续更新)
  4. Maven-atguigu
  5. 51Nod --1133 不重叠的线段
  6. 仿京东首页上侧导航左侧地址栏布局(1)
  7. 将可执行程序的内存空间扩展到3GB(windows)
  8. AS3 CookBook学习整理(十七)
  9. 全志代码中的bug之2
  10. STM8L编程环境官方库+STVD+COSMIC+ST-Link