线程八大基础核心六(线程属性)

Posted itall

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程八大基础核心六(线程属性)相关的知识,希望对你有一定的参考价值。

1.引子

在java多线程并发编程中,有八大基础核心。考考你:
看看都有哪八大基础核心呢?它们分别是:
    1.创建线程的方式
    2.线程启动
    3.线程停止
    4.线程生命周期
    5.线程相关的方法
    6.线程相关的属性
    7.线程异常处理
    8.线程安全

今天我们从第六个基础核心开始:线程相关属性

2.考考你

#前情回顾
  在我们日常多线程编程中,需要关心线程的线程优先级有:
  线程Id
  线程名称
  是否是守护线程
  线程优先级

#考考你
  1.你知道线程Id的作用吗?
  2.你知道线程名称的作用吗?
  3.你知道什么是守护线程吗?
  4.你知道守护线程与用户线程的区别吗?
  5.你知道有哪些线程优先级吗?
  6.你知道为什么我们在实际开发中,不应该依赖线程优先级吗?

3.案例

3.1.线程Id

简述:

1.线程Id,是线程的唯一身份标识

2.用于JVM执行过程中,识别线程

package com.anan.thread.threadproperty;

/**
 * 线程属性:Id
 * 1.线程Id,是线程的唯一身份标识
 * 2.用于JVM执行过程中,识别线程
 */
public class ThreadIdDemo {

    public static void main(String[] args) {
        // 创建线程对象
        Runnable r1 = new MyRunnable();
        Thread t1 = new Thread(r1);
        t1.start();

        // 打印主线程main的Id
        System.out.println("【主】线程Id:" + Thread.currentThread().getId());
    }

}

/**
 * 实现Runnable接口,创建线程
 */
class MyRunnable implements Runnable{
    public void run() {
        System.out.println("【子】线程Id:" + Thread.currentThread().getId());
    }
}

技术图片

 

技术图片

 

 技术图片

 

 

3.2.线程名称

简述:

1.线程名称,可以在创建线程对象的时候设置(有默认名称)

2.用于在开发过程中,方便调试,或者友好阅读

package com.anan.thread.threadproperty;

import java.util.concurrent.TimeUnit;

/**
 * 线程属性:Id
 * 1.线程名称,可以在创建线程对象的时候设置(有默认名称)
 * 2.用于在开发过程中,方便调试,或者友好阅读
 */
public class ThreadNameDemo {

    public static void main(String[] args) throws InterruptedException{
        // 创建两个线程对象
        Runnable r1 = new MyRunnable1();
        // 使用默认线程名称
        Thread t1 = new Thread(r1);
        t1.start();

        // 休眠1秒,实现顺序打印
        TimeUnit.SECONDS.sleep(1);

        // 指定线程名称
        Thread t2 = new Thread(r1,"my-thread-2");
        t2.start();
    }

}

/**
 * 实现Runnable接口,创建线程
 */
class MyRunnable1 implements Runnable{
    public void run() {
        System.out.println("线程名称:" + Thread.currentThread().getName());
    }
}

技术图片

 

 

4.讨论分享

#考考你答案
1.你知道线程Id的作用吗?
  1.1.线程Id,是线程的唯一身份标识
  1.2.用于JVM执行过程中,识别线程
  
2.你知道线程名称的作用吗?
  2.1.线程名称,可以在创建线程对象的时候设置(有默认名称)
  2.2.用于在开发过程中,方便调试,或者友好阅读
  
3.你知道什么是守护线程吗?
  3.1.守护线程,是在后台运行的线程
  
4.你知道守护线程与用户线程的区别吗?
  4.1.我们平常开发,创建的都是用户线程
  4.2.守护线程,与用户线程总体没有区别
  4.3.区别在于:
   4.3.1.守护线程,不会影响JVM的退出执行
   4.3.2.用户线程,当JVM退出的时候,需要等待用户线程执行完成
  
5.你知道有哪些线程优先级吗?
  5.1.线程优先级,表示获取CPU执行时间机会的多少,优先级越高,越有机会
  5.2.在java编程语言中,总共有10种优先级设置:
   最小优先级:1
   默认优先级:5
   最大优先级:10

  
6.你知道为什么我们在实际开发中,不应该依赖线程优先级吗?
  6.1.原因一:
    java的线程,是基于操作系统内核线程实现
  6.2.原因二:
    不同的操作系统,优先级定义不一样
  6.3.原因三:
    在不同的操作系统上,java线程优先级映射到操作系统内核会不一样,因此我们不应该依赖线程的优先级

 

以上是关于线程八大基础核心六(线程属性)的主要内容,如果未能解决你的问题,请参考以下文章

线程八大基础核心四(线程生命周期)

线程八大基础核心一(创建线程的方式)

线程八大基础核心五(线程相关方法一)

笔记-线程八大核心总纲

3.线程的八大核心基础知识之如何正确停止线程

2.线程的八大核心基础知识之启动线程的正确和错误方式