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

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线程优先级映射到操作系统内核会不一样,因此我们不应该依赖线程的优先级

原文地址:https://www.cnblogs.com/itall/p/12297889.html

时间: 2024-08-30 08:28:38

线程八大基础核心六(线程属性)的相关文章

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

1.引子 在java多线程并发编程中,有八大基础核心.考考你:看看都有哪八大基础核心呢?它们分别是: 1.创建线程的方式 2.线程启动 3.线程停止 4.线程生命周期 5.线程相关的方法 6.线程相关的属性 7.线程异常处理 8.线程安全 今天我们从第一个基础核心开始:创建线程的方式 2.考考你 #考考你: 你知道在java编程语言中,有几种创建线程的方式吗? #参考如下:网友说法.官方文档 网友说法: 官方文档说法: #说法比较: 在网络上,关于创建线程的方式.主流的说法有四种:继承Threa

线程八大基础核心二(启动线程)

1.引子 在java多线程并发编程中,有八大基础核心.考考你:看看都有哪八大基础核心呢?它们分别是: 1.创建线程的方式 2.线程启动 3.线程停止 4.线程生命周期 5.线程相关的方法 6.线程相关的属性 7.线程异常处理 8.线程安全 今天我们从第二个基础核心开始:启动线程 2.考考你 #前情回顾: 1.在java编程语言中,创建好线程对象后,通过调用start方法,启动线程 Thread t1 = new Thread(); t1.start(); #考考你: 1.问题一:可以调用两次st

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

1.引子 在java多线程并发编程中,有八大基础核心.考考你:看看都有哪八大基础核心呢?它们分别是: 1.创建线程的方式 2.线程启动 3.线程停止 4.线程生命周期 5.线程相关的方法 6.线程相关的属性 7.线程异常处理 8.线程安全 今天我们从第四个基础核心开始:线程生命周期 2.考考你 #前情回顾: 在java编程语言中,从线程创建,到线程执行结束,会经过一系列状态的转化,称为线程的生命周期 #考考你: 1.你知道线程生命周期中有哪些状态吗? 2.你知道各种状态对应的含义吗? 3.一图胜

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

1.引子 在java多线程并发编程中,有八大基础核心.考考你:看看都有哪八大基础核心呢?它们分别是: 1.创建线程的方式 2.线程启动 3.线程停止 4.线程生命周期 5.线程相关的方法 6.线程相关的属性 7.线程异常处理 8.线程安全 今天我们从第五个基础核心开始:线程相关方法 2.考考你 #前情回顾1.在java编程语言中,与线程相关的方法主要有: 1.1.Object.wait/Object.notify/Object/notifyAll 1.2.Thread.sleep/Thread.

Java并发基础(六) - 线程池

Java并发基础(六) - 线程池 1. 概述 这里讲一下Java并发编程的线程池的原理及其实现 2. 线程池的基本用法 2.1 线程池的处理流程图 该图来自<Java并发编程的艺术>: 从图中我们可以看出当一个新任务到线程池时,线程池的处理流程如下: 线程池首先判断线程池里面线程数是否达到核心线程数.如果不是则直接创建新线程作为核心线程来执行该任务(该线程作为核心线程不会由于任务的完成而销毁),否则进入下一流程. 判断阻塞队列是否已经满了.如果没满则将该任务放入阻塞队列中,等待核心线程处理,

java核心-多线程(4)-线程类基础知识

1.并发 <1>使用并发的一个重要原因是提高执行效率.由于I/O等情况阻塞,单个任务并不能充分利用CPU时间.所以在单处理器的机器上也应该使用并发. <2>为了实现并发,操作系统层面提供了.但是进程的数量和开销都有限制,并且多个进程之间的数据共享比较麻烦.另一种比较轻量的并发实现是使用线程,一个进程可以包含多个线程.线程在进程中没有数量限制, 数据共享相对简单.线程的支持跟语言是有关系的.Java 语言中支持多线程. <3>Java 中的多线程是抢占式的.这意味着一个任

第二章线程同步基础

Java 7 并发编程实战手册目录 代码下载(https://github.com/Wang-Jun-Chao/java-concurrency) 第二章线程同步基础 2.1简介 多个执行线程共享一个资源的情景,是最常见的并发编程情景之一.在并发应用中常常遇到这样的情景:多个线程读或者写相同的数据,或者访问相同的文件或数据库连接. 为了防止这些共享资源可能出现的错误或数据不一致,我们必须实现一些机制来防止这些错误的发生. 为了解决这些问题,引入了临界区(Critical Section)概念,临

多线程、并发及线程的基础问题

1)Java 中能创建 volatile 数组吗? 能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组.我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了. 2)volatile 能使得一个非原子操作变成原子操作吗? 一个典型的例子是在类中有一个 long 类型的成员变量.如果你知道该成员变量会被多个线程访问,如计数器.价格等,你最好是将其设置

C# 多线程(二) 线程同步基础

本系列的第一篇简单介绍了线程的概念以及对线程的一些简单的操作,从这一篇开始讲解线程同步,线程同步是多线程技术的难点.线程同步基础由以下几个部分内容组成 1.同步要领(Synchronization Essentials) 2.锁(Locking) 3.线程安全(Thread Safety) 4.事件等待句柄(Signaling with Event Wait Handles) 5.同步上下文(Synchronization Contexts) 同步要领(Synchronization Essen