多线程中的isAlive方法相信大家都知道。无非就是当前线程如果是存活的,在运行中,则返回true,否则返回false,不过还是有些有趣现象的,我们这里用代码演示一下:

class TestThread extends Thread{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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

相比大家对这个结果就很清晰了把!!!

java多线程 isAlive方法的有趣现象相关推荐

  1. Java多线程——线程池的饥饿现象

    概述 定长线程池的使用过程中会存在饥饿现象,也就是当多线程情况下,当池中所有线程都被占用后,被占用的线程又需要空闲线程去进行下一步的操作,此时又获取不到池中空闲的线程,此时就出现了饥饿现象. 示例 p ...

  2. Java——多线程之方法详解

    Java多线程系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多 ...

  3. java多线程中方法_java中多线程 - 多线程中的基本方法

    介绍一下线程中基本的方法使用 线程睡眠sleep() Thread.sleep(毫秒);我们可以通过sleep方法设置让线程睡眠.可以看到sleep是个静态方法 public static nativ ...

  4. Java多线程优化方法及使用方式

    一.多线程介绍 在编程中,我们不可逃避的会遇到多线程的编程问题,因为在大多数的业务系统中需要并发处理,如果是在并发的场景中,多线程就非常重要了.另外,我们在面试的时候,面试官通常也会问到我们关于多线程 ...

  5. java多线程实现方法

    2019独角兽企业重金招聘Python工程师标准>>> 编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互.一般有三种方法,Thread,Runnable,Calla ...

  6. Java 多线程 yield方法

    yield()方法 理论上,yield意味着放手,放弃,投降.一个调用yield()方法的线程告诉虚拟机它乐意让其他线程占用自己的位置.这表明该线程没有在做一些紧急的事情.注意,这仅是一个暗示,并不能 ...

  7. java 多线程wait()方法的基本使用——63

    wait()方法的作用 wait()方法的作用是使当前线程暂停运行,并释放锁. 创建测试用的Java项目 类Test1.java代码 package chapter3.test3_1.test3_1_ ...

  8. java多线程run方法传参

    我们知道多线程是通过star()方法让线程处于准备就绪状态,而实际运行的业务逻辑是放在run()方法体中的,但是run()方法是没有参数的方法,实际的业务场景中,我们可能需要向方法体中传递参数,下面介 ...

  9. java多线程通信方法

    http://my.oschina.net/u/248570/blog/53226 转载于:https://www.cnblogs.com/svennee/p/4081153.html

最新文章

  1. 中国首个量子计算机诞生 中科院、阿里巴巴共同研发
  2. 文件标识符必须为双精度类型的整数值标量_【翻译】VTK官方文档 - vtk文件格式
  3. Java - Java集合中的快速失败Fail Fast 机制
  4. vue+elementUI 键盘回车事件导致页面刷新的问题
  5. BootStrap笔记-Model(模式对话框)样式修改
  6. 课程体系包括哪些要素_利润的构成要素包括哪些部分
  7. Myeclipse学习总结(2)——MyEclipse快捷键大全
  8. python内置函数可以返回数值型序列中所有元素之和_Python内置函数________________用来返回数值型序列中所有元素之和。...
  9. Redis 概述、Win 10 下载安装、redis.conf 配置文件详解
  10. 离散数学真值表c语言实验报告,NJUPT【离散数学】实验报告
  11. AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
  12. iOS开发中对音效和音乐播放的简单实现
  13. Postman的tests断言
  14. python将一句话重复n次输出_在Python中创建单项重复n次的列表
  15. 屏幕刷新频率怎么更改?
  16. 酷客多接受CCTV2财经频道专访
  17. java 计算百分比_java前后台计算百分比(保留2位小数)
  18. 微信图片怎么添加竖排文字_轻松设置微信竖排昵称
  19. 如何用C#+WinRAR 实现压缩
  20. 宽带计费认证系统的PPPoE认证技术

热门文章

  1. MFC中进度条的学习
  2. fprintf 函数详解
  3. Linux进程通信(一)——pipe管道
  4. 【Spring Boot JPA】ManyToOne OneToMany学习笔记
  5. vss服务器的简单使用
  6. gallery3D(3)
  7. meta http-equiv=Content-Type content=text/html; charset=gb2312设置中文显示
  8. 重装系统 win10 原生最纯净的
  9. 【Socket网络编程进阶与实战】------ Socket网络编程快速入门
  10. Android接入高德地图SDK如何设置Key(发布版/测试版)