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


    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线程优先级映射到操作系统内核会不一样,因此我们不应该依赖线程的优先级
  • 相关阅读:
    [转]线上GC故障解决过程记录
    [转]JVM性能调优监控工具
    [转]JVM运行时内存结构
    根据PV量来确定需要进行压测的并发量
    rsync文件同步、Inotify-tools参数详解
    keepalived双BACKUP加nopreempt失效、手动监控服务脚步。
    oracle 死锁和锁等待的区别
    [转]查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock
    v$Session详解
    window用Xmanager4.0的Xstart连接linux远程桌面
  • 原文地址:https://www.cnblogs.com/itall/p/12297889.html
Copyright © 2020-2023  润新知