从头认识多线程-1.4 isAlive()和Sleep()

来源:互联网 发布:异步加载js的方法 编辑:程序博客网 时间:2024/04/28 02:10

这一章节我们来讨论一下多线程里面的isAlive()这个函数。

1.含义

isAlive()指线程的使用状态,是否起来了


2.代码例子

(1)在不同的线程运行同一个方法

package com.ray.deepintothread.ch01.topic_4;public class IsAliveSample_1 {public static void main(String[] args) {ThreadFive threadFive = new ThreadFive();Thread thread = new Thread(threadFive);System.out.println("Thread name:" + Thread.currentThread().getName());System.out.println("Thread isAlive:" + Thread.currentThread().isAlive());thread.setName("myThread");// 设置运行线程的名称threadFive.setName("threadFive");// 设置实例的名称threadFive.myTest();thread.start();}}class ThreadFive extends Thread {public void myTest() {show();}private void show() {System.out.println("----------begin----------");// 这里指的是执行这个线程的名称System.out.println("Thread name:" + Thread.currentThread().getName());System.out.println("Thread isAlive:" + Thread.currentThread().isAlive());// this.getName指的是这个实例的名称// 由于是继承Thread,Thread本身可以设置名称System.out.println("Instance name:" + this.getName());System.out.println("Instance isAlive:" + this.isAlive());System.out.println("----------end----------");}@Overridepublic void run() {super.run();show();}}

输出:

Thread name:main
Thread isAlive:true
----------begin----------
Thread name:main
Thread isAlive:true
Instance name:threadFive
Instance isAlive:false
----------end----------
----------begin----------
Thread name:myThread
Thread isAlive:true
Instance name:threadFive
Instance isAlive:false
----------end----------


解释:

(a)第一部分的输出,代表是main这一个线程的名字,还有代表main线程正在激活状态

(b)第二部分的输出,代表由main线程执行show方法,然后实例的名称是threadFive,但是threadFive这个实例所代表的线程并没有激活,所以isAlive=false

(c)第三部分的输出,代表由新建的线程myThread来执行show方法,然后实例的名称是threadFive,但是threadFive这个实例所代表的线程并没有激活,所以isAlive=false


(2)查看线程的状态

package com.ray.deepintothread.ch01.topic_4;public class IsAliveSample_2 {public static void main(String[] args) throws InterruptedException {ThreadSix threadSix = new ThreadSix();Thread thread = new Thread(threadSix);System.out.println("thread.isAlive()" + thread.isAlive());thread.start();System.out.println("thread.isAlive()" + thread.isAlive());Thread.sleep(1000);System.out.println("thread.isAlive()" + thread.isAlive());}}class ThreadSix extends Thread {@Overridepublic void run() {super.run();}}

输出:

thread.isAlive():false
thread.isAlive():true
thread.isAlive():false


这个例子主要目的,就是查看执行任务的线程的状态

从输出可以看出,第一个输出没有激活线程,第二个输出激活了线程,而第三个是由于线程在等待一秒之后才输出的,任务已经在这一秒里面已经执行完毕。

从并行的角度来说,上面由两个线程并行执行,一个是main,负责激活执行任务的线程和输出线程的状态,另一个是单独的执行任务的线程,由于在main线程里面等上了1秒,另一个线程在这1秒里面已经执行完毕所有的任务,因此才有第三个false的出现。


总结:这一章节简单的介绍了一下isAlive()。


我的github:https://github.com/raylee2015/DeepIntoThread

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 玩游戏心态易崩怎么办 打游戏心态炸了怎么办 赛鸽比赛回来拉稀怎么办 鸽子拉竹节水便怎么办 新买的鸽子拉稀怎么办 信鸽羽毛上长了虫子怎么办 羊肉煮熟了太硬怎么办 切菜不小心切到手指怎么办 打荷盘子端错了怎么办 学厨师不会翻锅怎么办? 在饭店上班不给工资怎么办 炒菜的左手拿不起锅怎么办?? 厨师想尽快上手炒菜怎么办? 空调吹的肩膀痛怎么办 学厨师翻锅不会怎么办 肋软骨隆鼻太硬怎么办 百度云下载速度慢怎么办 买的种子没出怎么办 铃木小r烧整流器怎么办 厨师在厨房太热怎么办 被家长投诉体罚孩子怎么办 空腹彩超喝水了怎么办 鱼把厕.所堵了怎么办 螃蟹爬进厕所里怎么办 抄作业被老师发现怎么办 鱼把厕所堵了怎么办 刚憋尿上完厕所之后腹部很疼怎么办 小孩被老师投诉了家长怎么办 家长投诉被老师知道了怎么办 孩子上课不敢回答问题怎么办 孩子犯了错家长怎么办 错了不该错的题怎么办 不该错的题错了怎么办 小学生不爱写课堂作业怎么办 手被老师打肿了怎么办 老师反应孩子学习退步了怎么办 学护理的打屁股针怎么办 教师被投诉打学生怎么办 遇到内向的学生教师应该怎么办 教师遇到顽劣的学生怎么办 家长质疑老师的能力怎么办