java - isAlive()方法疑问

查看:175
本文介绍了java - isAlive()方法疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

package com.brianway.learning.java.multithread.communication.example0;
public class IsAlive extends Thread {

@Override
public void run() {
    System.out.println("run---" + this.isAlive());
}
public static void main(String args[]) {
    IsAlive isAlive = new IsAlive();
    Thread thread = new Thread(isAlive);
    System.out.println("begin---" + thread.isAlive());
    thread.start(); //[1]
    thread.run(); //[2]
    isAlive.start(); //[3]
    isAlive.run(); //[4]
    System.out.println("end---" + thread.isAlive());
}

}

如图所示代码,注释[2] [3] [4]步,则打印:
begin---false
end---true
run---false 这个不懂为什么?

如图所示代码,注释[1] [3] [4]步,则打印:
begin---false
run---false 这个难道是随机的么?可能为true,也可能为false
end---false

如图所示代码,注释[1] [2] [4]步,则打印:这种情况比较好理解
begin---false
end---false
run---true

如图所示代码,注释[1] [2] [3]步,则打印:
begin---false
run---false 为什么使用isAlive.run()的时候,是false呢?
end---false

解决方案

明确几个概念,Thread对象只有使用了start()方法进行启动,才算是建立线程并运行了,如果直接调用run()方法,所有的程序只会在当前现成中运行,没有新的线程被创建。其次,Thread对象构造方法可以放入一个Runnable接口的对象,Thread也实现了Runnable,所以你能把一个线程加入进去,但并不代表线程运行时会把你插进去的Thread对象也变成线程,而只是调用它的run()方法而已。所以在你的例子里,除了直接调用isAlive.start()可以建立线程以外,其他的方式isAlive这个对象都不会以独立线程去运行,所以都是false

这篇关于java - isAlive()方法疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆