Java多线程的常见属性(线程状态,守护线程)

常见的属性

属性获取方法
IDgetId()
名称getName()
状态getState()
优先级getPriority()
是否为守护线程isDaemon()
是否存活isAlive()
是否被中断isInterrupted()

ID 是线程的唯一标识,不同线程不会重复

通过getName()来获取到当前线程的名称

public  class TestDemo {
     static Thread t1 = new Thread(){
         @Override
         public void run() {
             System.out.println("线程1 的ID => " + this.getId());
             System.out.println("线程1 的名称 => " + this.getName());
             
         }
     };

     static Thread t2 = new Thread(new Runnable() {
         @Override
         public void run() {
             System.out.println("线程2 的ID => " + Thread.currentThread().getId());
             System.out.println("线程2 的名称 => " + Thread.currentThread().getName());
         }
     });



    public static void main(String[] args) {
        t1.start();
        t2.start();
    }

}

在这里插入图片描述
线程的状态,表示线程当前所处的一个情况

线程的状态是一个枚举类型 Thread.State

public  class TestDemo {
    public static void main(String[] args) {
        for (Thread.State state: Thread.State.values()
             ) {
            System.out.println(state);
        }
    }
}

在这里插入图片描述
这里我们可以看出线程一共分为6个状态

  1. NEW状态:Thread对象刚创建,还没有在系统中创建线程,相当于任务交给线程了,但是线程还没开始执行。
  2. RUNNABLE状态:线程是一个准备就绪的状态,随时可以调度到CPU上执行,或者正在CPU上执行。
  3. BLOCKED状态:这种状态是指一个阻塞线程在等待monitor锁。
  4. WAITING状态:一个线程在等待另一个线程执行一个动作时在这个状态。
  5. TIMED_WAITING状态:一个线程在一个特定的等待时间内等待另一个线程完成一个动作会在这个状态。
  6. TERMINATED状态:系统中线程结束了(入口方法执行完毕),但是Thread对象还没销毁。

下面是状态转换图:
在这里插入图片描述
线程的优先级

  • 优先级高的线程具有比优先级低的线程有更多的执行机会,而并不是优先级高的先执行优先级低的后执行。
  • 线程的优先级一共有10级,最低级为1级,最高级为10级,默认5级。
public  class TestDemo {
    static Thread t1 = new Thread(){
        @Override
        public void run() {
            System.out.println(this.getName()+ "线程优先级 => "+this.getPriority());
        }
    };
    static Thread t2 = new Thread(){
        @Override
        public void run() {
            System.out.println(this.getName()+"线程优先级 => "+this.getPriority());
        }
    };
    public static void main(String[] args) {
        t1.start();

        t2.start();
    }
}

在这里插入图片描述

守护线程

  • 当所有用户线程都执行结束,即使守护线程线程体没有执行完也会停止;
  • 如果有任何一个用户线程没有执行结束,即使守护线程执行结束了也不会停止,进入等待状态,直到最后一个用户线程执行结束。
  • 可以通过setDaemon(),来设置守护线程
public  class TestDemo {
    static Thread t1 = new Thread(){
        @Override
        public void run() {
            System.out.println(this.getName()+ "是否为守护线程 => "+this.isDaemon());
        }
    };
    static Thread t2 = new Thread(){
        @Override
        public void run() {
            System.out.println(this.getName()+"是否为守护线程 => "+this.isDaemon());
        }
    };
    public static void main(String[] args) {
        t1.start();
        t2.setDaemon(true);//设置守护线程
        t2.start();
    }
}

在这里插入图片描述

以及线程是否存活和线程是否被中断

public  class TestDemo {
    static Thread t1 = new Thread(){
        @Override
        public void run() {
            System.out.println("线程1 是否存活 => "+this.isAlive());            
            System.out.println("线程1 是否被中断 => "+this.isInterrupted());
        }
    };
    
    public static void main(String[] args) {
        t1.start();
    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值