isAlive()方法的作用
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()方法的作用相关推荐
- java thread isalive,《Java多线程编程核心技术(第2版)》 —1.4 isAlive()方法
1.4 isAlive()方法 isAlive()方法的功能是判断当前的线程是否存活. 新建项目t7,类文件MyThread.java代码如下: public class MyThread exten ...
- Object的finalize()方法的作用是否与C++的析构函数作用相同
Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...
- html语言中span,html元素span标签的使用方法及作用
html元素 标签是一个没有任何语义的行内元素,不对设置任何样式,则不会有任何视觉效果.有关该标签的使用方法及作用详解如下: 标签的定义 标签属于行内元素,无任何特殊语义. 标签主要用于定义文本样式, ...
- getId()方法的作用
getId() 方法的作用非常简单,就是取得正在运行线程的唯一标识. 如下代码演示了 getId() 方法的使用: public class Test15 {public static void ma ...
- python中tell_Python的File tell()方法使用方法及作用解析(实例)
今天这篇文章我们来了解一下python之中的tell方法,在进入文章之前我们首先要知道pythontell()是什么,tell()它能用在python编程之中的什么地方,能够起到什么作用.这些东西我们 ...
- Java中intern()方法的作用
一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: [java] view plaincopyprint? public stati ...
- PHP中的常见魔术方法功能作用及用法实例
这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...
- 1.4 isAlive()方法
方法isAlive()是判断当前线程是否处于活动状态. 线程代码: public class TestThread extends Thread{@Overridepublic void run() ...
- JAVA中String类的intern()方法的作用
2019独角兽企业重金招聘Python工程师标准>>> 一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: [ja ...
最新文章
- android vlc eclipse,在Eclipse下导入vlc-android并编译
- python 多个变量赋值
- SpringMVC源码——未完待续
- idea 使用maven构建项目时,target bytecode version经常自动变化
- java-第九章-编写程序,打印如图案,要求图案的行数由用户输入.
- 2019 CCPC-Wannafly Winter Camp Div2 Day1
- IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
- 基于SpringBoot 2.3的WebService指南(包含案例)
- 从单机到集群会话的管理之集群模式一
- pytorch常见错误(持续更新)
- 对手机彩铃的一些想法
- My97DatePicker时间控件在asp.net的应用
- Linux(Ubuntu)虚拟机识别U盘
- oracle e-bussiness 简称
- iOS 摸鱼周报 #53 | 远程办公正在成为趋势
- 计算机网络汇聚层,【大白电气】接入层、汇聚层、核心层——中大型计算机网络系统结构介绍及交换机选型建议...
- win10用caffe训练自己的数据
- 企业购买团体商业保险有助提升公司形象
- Linux开机启动、bashrc、定时任务
- Javascript_ES5_学习笔记
热门文章
- BlockChain:互联网与区块链之间的那些事(P2P下载、P-CDN、分布式计算、社交媒体、P2P借贷、众筹、区块链、自组织)
- Ubuntu20.04中安装shutter
- python、numpy,keras,tensorflow等函数用法积累(持续更新)
- Maven-atguigu
- 51Nod --1133 不重叠的线段
- 仿京东首页上侧导航左侧地址栏布局(1)
- 将可执行程序的内存空间扩展到3GB(windows)
- AS3 CookBook学习整理(十七)
- 全志代码中的bug之2
- STM8L编程环境官方库+STVD+COSMIC+ST-Link