关于多线程下isAlive()方法


title: 关于多线程下isAlive()方法
date: 2019-08-05 16:14:40
tags: [java,多线程]


本文主要讲述关于多线程下isAlive()方法查看线程状态的注意事项,快进来看一下吧!

isAlive()方法

isAlive()方法的作用是测试线程是否处于活动状态。

  • **活动状态:**线程已经启动尚未终止的状态即为活动状态
代码分析
  • 自定义线程类

    package unit.one.mythread_1_4;
    
    /**
     * @author epochong
     * @date 2019/8/5 13:50
     * @email epochong@163.com
     * @blog epochong.github.io
     * @describe 自定义线程类
     */
    public class CountOperate extends Thread {
        public CountOperate() {
            System.out.println("构造-Thread.currentThread().getName() = " +Thread.currentThread().isAlive());
            System.out.println("构造-this.isAlive() = " + this.isAlive());
        }
        @Override
        public void run() {
            System.out.println("run-Thread.currentThread().getName() = " + Thread.currentThread().getName()+ ":" + Thread.currentThread().isAlive());
            System.out.println("run-this.getName() = " + this.getName() + ":" + this.isAlive());
        }
    }
    
  • 测试类

    package unit.one.mythread_1_4;
    
    /**
     * @author epochong
     * @date 2019/8/5 13:52
     * @email epochong@163.com
     * @blog epochong.github.io
     * @describe 测试类
     */
    public class Main {
        public static void main(String[] args) {
            CountOperate countOperate = new CountOperate();
            //countOperate.start();
            Thread thread = new Thread(countOperate);
            thread.setName("A");
            thread.start();
        }
    }
    
  • 结果

    构造-Thread.currentThread().getName() = main:true
    构造-this.isAlive() = Thread-0:false
    run-Thread.currentThread().getName() = A:true
    run-this.getName() = Thread-0:false

    • 调用构造的是名为main的线程,main线程是活动状态
    • this-countOperate没有调用start()方法,为非活动状态
    • 调用start()方法的是thread对象,thread在测试类中命名为A,为活动状态
    • this是countOperate对象,未使用setName为默认名称,未调用start()方法,为非活动状态
  • 改为一下测试

    package unit.one.mythread_1_4;
    
    /**
     * @author epochong
     * @date 2019/8/5 13:52
     * @email epochong@163.com
     * @blog epochong.github.io
     * @describe 测试类
     */
    public class Main {
        public static void main(String[] args) {
            CountOperate countOperate = new CountOperate();
            countOperate.start();
            Thread thread = new Thread(countOperate);
            thread.setName("A");
            //thread.start();
        }
    }
    
  • 结果

    构造-Thread.currentThread().getName() = main:true
    构造-this.isAlive() = Thread-0:false
    run-Thread.currentThread().getName() = Thread-0:true
    run-this.getName() = Thread-0:true

  • 解释

    • Thread.currentThread().getName()表示调用者线程,为活动状态
    • this代表当前对象countOperate调用的start方法,为活动状态
总结
  • 是否存活看调用start()方法的是那一个线程对象
  • threadcountPerate是两个线程对象,均未命名时为程序默认的名称从Thread-0开始命名
  • 因为countPerate继承Thread类对应的getter、setter调用父类的方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值