Java并发(七)--线程各属性

1. 属性概览

在这里插入图片描述

2. 线程ID

每个线程都有自己的ID,用于标识不同的线程。

源码:

/* Set thread ID */
    tid = nextThreadID();
	private static long threadSeqNumber;
    private static synchronized long nextThreadID() {
        return ++threadSeqNumber;
    }

线程ID通过synchronized关键字修饰的方法里,进行先++自增。所以主线程ID不是0而是1,而我们自己创建的线程也不是2,因为JVM会自动帮我们创建一些守护线程,来为我们的用户线程提供服务。

3. 线程名称

源码:

	public Thread() {
        init(null, null, "Thread-" + nextThreadNum(), 0);
    }

	private static int threadInitNumber;
    private static synchronized int nextThreadNum() {
        return threadInitNumber++;
    }
public final synchronized void setName(String name) {
    checkAccess();
    if (name == null) {
        throw new NullPointerException("name cannot be null");
    }

    this.name = name;
    //这个判断线程是不是刚刚启动,如果不是,则不能修改native层的线程名字,
    //但是线程内部的Java名字可以修改。
    if (threadStatus != 0) {
        setNativeName(name);
    }
}

3. 守护线程

作用:给用户线程提供服务

private boolean     daemon = false;
this.daemon = parent.isDaemon();

守护线程的三个特性:

  • 线程类型默认继承自父线程
  • 守护线程由JVM启动
  • 不影响JVM退出,JVM退出只看用户线程是否执行完成。

守护线程和普通线程的区别:

  • 整体无太大区别
  • 唯一区别在于是否影响JVM退出。

是否需要设置守护线程:不需要,因为把我们自己的线程设置为守护线程不安全,如果JVM看到只有守护线程,会自动关闭JVM,则会导致数据不一致等问题。

4. 线程优先级

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;

在Java中,最小优先级为1,最大优先级为10,默认是5.

程序设计不应依赖于优先级:

  • 不同操作系统优先级不同
  • 优先级会被操作系统改变
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值