目录

Life in Flow

Embrace your dreams and unlock your full potential at every stage of life.

X

线程中的属性

线程各属性总览

线程各属性

线程Id、线程名字

 线程是从1开始的,除主线程外,JVM虚拟机会开启一些额外的进程:Finalizer、Reference Handler、Signal Dispatcher、Attach Listener

/**
 * 描述:  ID从1开始,JVM运行起来后,我们自己创建的线程的ID早已不是2
 *
 * 主线程id 1
 * t1的id 20
 * t1的名字 Thread-0
 * t1的名字 NewThreadT1
 */
public class Id {
    public static void main(String[] args) {
        Thread t1 = new Thread();
        System.out.println("主线程id " + Thread.currentThread().getId());
        System.out.println("t1的id " + t1.getId());
        System.out.println("t1的名字 " + t1.getName());
        //修改t1的名字
        t1.setName("NewThreadT1");
        System.out.println("t1的名字 " + t1.getName());
    }
}

守护线程

 守护线程是为了给用户线程提供服务的线程。
 当运行的所有线程都是守护线程时,那么这些守护线程就会和JVM一起停止工作。否则JVM是不能自行停止运行的。

守护线程的三个特性

* 线程的类型默认继承自父线程:守护线程创建出来的线程自动就是守护线程。除非用setDaemon()可以将用户线程设置为守护先。
* 被谁启动:通常所有的守护线程都是由JVM自动来启动的。
* 不影响JVM退出:JVM想要退出的时候只看还有没有用户线程,不关心是否还有很多守护线程。

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

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

什么时候需要设置守护线程?
 没有特殊情况就无需设置守护线程,因为设置成守护线程十分危险,会导致有线程不能完整执行 JVM 就强行退出的风险,会出现数据不一样。

线程的优先级

 优先级设置可以为 1-10 的任一数值,默认创建的线程优先级为5;Thread 类中定义了三个线程优先级,一般情况下推荐使用这几个常量,不要自行设置数值。分别是:

  • MIN_PRIORITY(1)
  • NORM_PRIORITY(5)
  • MAX_PRIORITY(10)

程序设计不应该依赖于优先级,不同操作系统的优先级是不一样的。优先级会被操作系统改变。

/**
 * 线程优先级Demo
 */

public class PriorityDemo {

    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (true) {
                System.out.println(Thread.currentThread().getName());
            }
        }, "线程1");

        Thread thread2 = new Thread(() -> {
            while (true) {
                System.out.println(Thread.currentThread().getName());
            }
        }, "线程2");

        thread.setPriority(Thread.MIN_PRIORITY);
        thread2.setPriority(Thread.MAX_PRIORITY);

        thread.start();
        thread2.start();
    }
}

总结

线程各属性总结


作者:Soulboy