了解Thread类的其他一些方法及常见属性

对于Thread类,是JVM用来管理线程的一个类,换句话说:每个线程都有一个唯一的Thread对象与之关联----》Java代码中的Thread对象和操作系统中的线程是一一对应的!!

Thread类是Java中表示线程的类。它允许在Java程序中创建线程,并提供了控制线程执行的方法。Thread类本身是一个Java类,为Java提供了创建和管理线程的标准方式。而线程是Java程序中的执行单元,通过使用Thread类可以创建和管理多个线程。因此,Thread类和线程之间是一种对应关系,Thread类用于创建和管理线程,线程则是通过Thread类创建的。

Thread的常见的构造方法:

  1. Thread() :创建线程对象(继承Thread类使用的)~

  2. Thread(Runnable target) :使用Runnable对象创建线程对象~

  3. Thread(String name) :创建线程对象并命名(给线程起名字,方便调试)~

  4. Thread(Runnable target, String name):使用Runnable对象创建线程对象,并命名~

    public class Main3 {
    public static void main(String[] args) {
    Thread t=new Thread(()->{
    while (true){
    System.out.println("hello t---->t线程");
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    },"小小百货君");

    复制代码
         t.start();
     }

    }

在上述的代码中:变相怪杰是我给线程起的名字,名字和程序的运行结果及运行效率没有任何影响!!并且在打印的过程中看不到,仅可以通过jconsloe可以看线程从而看到变换~!!

如果你对jconsloe不了解,那么请看笔者的文章:Java进行多线程编程?(lambda表达式~)_念君思宁的博客-CSDN博客

该篇文章中旬有关于jconsloe的介绍~

在这个代码中,在查看线程的时候,是看不到main线程的,其实main线程已经结束了,----》main方法执行完了!!原因在于:当前的代码执行太快了,肉眼看不到~

了解一下:Thread的几个常见的属性:

|--------|-----------------|
| 属性 | 获取方法 |
| ID | getID() |
| 名称 | getName() |
| 状态 | getState() |
| 优先级 | getPriority() |
| 是否后台线程 | isDaemon() |
| 是否存活 | isAlive() |
| 是否被中断 | isInterrupted() |

TipS:每个线程都有自己的状态,优先级,上下文,记账信息......(一个进程可能有一个线程或多个线程,每个线程都有............)

true:后台线程

false:前台线程

注意须知:

  1. ID是线程的唯一标识,不同线程不会重复
  2. 名称是各种调试工具用到
  3. 状态表示线程当前所处的一个情况(下面我们会进一步说明)
  4. 优先级搞的线程理论上来说更容易被调度到
  5. 关于后台线程需要记住一点:JVM会在一个进程的所有非后台进程结束后,才会结束运行
  6. 是否存活:即简单的理解为:run()方法是否结束运行了
  7. 线程的中断问题:下面我们也会进一步的说明

是否后台线程: isDaemon():true表示后台线程,false表示前台线程;后台线程不阻止Java进程结束,哪怕后台线程还没执行完,Java进程该结束就结束了,前台线程会阻止Java进程结束,必须得Java进程中的所有前台线程都执行完,Java进程才能结束

创建的线程默认是前台的!!可以通过setDaemon()设置成后台线程

t.setDaemon(false)

t.setDaemon(true)

**是否存活:**isAlive():描述系统内核里的哪个线程是否存活!!线程的入口方法执行完毕,此时系统中的对应的线程就没了,此时调用该线程isAlive()就是false!!

复制代码
public class Main4 {
    public static void main(String[] args) {
        Thread t=new Thread(()->{
            System.out.println("hello t---->t线程");
        });

        t.start();

        try {
            //上述t线程没有进行任何循环和sleep,意味着里面的代码会迅速执行完毕
            //main线程如果sleep(1000)结束,此时t基本上已经执行完了的状态
            //此时t对象还在,但是,在系统中对应的线程已经结束了
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(t.isAlive());//false
    }
}

经典面试题:

注意:

run()方法表示了线程的入口方法是啥(线程启动起来,要执行哪些逻辑)(不少要让程序员调用的,要交给系统去自动调用

start()方法真正从系统这里,创建一个线程,新的线程将会执行run()方法

相关推荐
方也_arkling20 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮20 小时前
Spring Bean作用域与生命周期全解析
java·spring
风吹夏回21 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei1121 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_11221 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding21 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋921 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本21 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
xiaoshuaishuai821 小时前
C# 内存管理与资源泄漏
开发语言·c#
DIY源码阁1 天前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse