首页 > 编程语言 >Java线程生命周期

Java线程生命周期

时间:2023-01-04 14:14:19浏览次数:41  
标签:生命周期 Java Thread void t1 start 线程 public

image

java.lang.Thread类包含一个静态枚举,它定义了它的潜在状态。在任何给定的时间点内,线程只能处于以下状态之一:

  • NEW – 一个新创建的线程,尚未开始执行
  • RUNNABLE – 正在运行或准备执行,但它正在等待资源分配
  • BLOCKED – 等待获取监视器锁以进入或重新进入同步块/方法
  • WAITING – 等待其他线程执行特定操作,无任何时间限制
  • TIMED_WAITING – 等待其他线程在指定时间段内执行特定操作
  • TERMINATED – 已完成执行

NEW

创建后还没有执行start()方法的线程所处的状态

    public static void main(String[] args) {
        Thread t = new Thread(() -> {});
        System.out.println(t.getState());
    }

RUNNABLE

执行start()方法后

    public static void main(String[] args) {
        Thread t = new Thread(() -> {});
        t.start();
        System.out.println(t.getState());
    }

BLOCKED

public class test3 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(test3::func);
        Thread t2 = new Thread(test3::func);
        t1.start();
        t2.start();
        Thread.sleep(1000);
        System.out.println(t2.getState());
    }
    
    public static synchronized void func() {
        while(true) {

        }
    }
}

WAITING

比如,线程1创建线程2并执行,如果t1线程执行t2.join(),那么在t2完成前,t1的状态就是waiting

Timed Waiting

当线程等待另一个线程在规定的时间内执行特定操作时,该线程处于TIMED_WAITING状态。

根据JavaDocs,有五种方法可以将线程置于TIMED_WAITING状态:

  • thread.sleep(long millis)
  • wait(int timeout) 或 wait(int timeout, int nanos)
  • thread.join(long millis)
  • LockSupport.parkNanos
  • LockSupport.parkUntil
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Thread interrupted");
            }
        });
        t1.start();
        Thread.sleep(1000);
        System.out.println(t1.getState());
    }

TERMINATED

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{});
        t1.start();
        Thread.sleep(1000);
        System.out.println(t1.getState());
    }

标签:生命周期,Java,Thread,void,t1,start,线程,public
From: https://www.cnblogs.com/antidogmatist/p/17024657.html

相关文章

  • 第五阶段:Java Web 核心技术
    认清现实,放弃幻想。(特此感谢动力节点老杜分享出来的学习路线)5.第五阶段:JavaWeb核心技术5.1Tomcat与HTTP5.1.1学习目标1.掌握Tomcat服务器搭建2......
  • SSH框架学习(十、Junit+GroboUtils进行多线程测试)
    Junit4不能模拟多线程的情况,需要其他支持,我用的是GroboUtils,最新版本5,下载地址:​​http://groboutils.sourceforge.net/downloads.html​​GroboUtils测试的代码是用网上抄......
  • java spring jar包下载
    想学习一下javaspring,真是不知道怎么来着手。在网上查了一下eclipse里建spring工程的方法:1、创建Java项目转到 文件菜单- 新建- 项目- Java项目。输入项目名称,例如......
  • self hosted private support chat software use JavaScript remove HTML tags
    ThemainreasonforremovingHTMLtagsinonlinecustomerservicesystemsistopreventmalicioususersfromattackingthewebsiteorotherusersbyinputting......
  • 在线客服系统中javascript 源码实现除去html标签
    在线客服系统中除去HTML标签的主要原因是为了防止恶意用户通过输入恶意的HTML代码来攻击网站或其他用户。例如,如果你不过滤用户输入的HTML,一个恶意用户可能会输入下面这段......
  • Java 合并PDF文件
    这篇文章主要介绍如何在Java应用程序中实现将多个PDF文件合并为一个PDF的功能。使用组件:Spire.PDFforJava使用以下代码前,需要下载​​Spire.PDFforJava​​包并解压,然后......
  • Java 在Word中添加数学公式(Latex/MathML)
    本文介绍通过Java程序在Word文档中添加数学公式的方法。添加时,可添加latex数学公式或者MathML数学公式。详细内容见下文。1.程序环境Word测试文档:.docx2013Wordjar包:free......
  • Java 给PDF文档设置背景颜色和背景图片
    如题,这篇文章主要介绍如何在Java应用程序中给PDF文档设置背景颜色和背景图片。使用组件:Spire.PDFforJava​​下载Spire.PDFforJAVA包​​并解压缩,然后从lib文件夹下导入......
  • Java 拆分PDF文档
    这篇文章主要介绍以下两种拆分方式:将一个PDF文档快速拆分为多个PDF(每个PDF包含1页)根据指定页码范围,将一个PDF文档拆分为2个或多个PDF(每个PDF可以包含不同的页数)使用组件:Spir......
  • Java 在PPT中添加文本、图片超链接
    本文介绍通过Java程序在PPT幻灯片中添加超链接的方法,可以给文本或者图片设置超链接,设置超链接时,可设置包括网页链接、邮件地址链接、幻灯片跳转链接等不同指向对象的链接。......