热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Java线程的生命周期的介绍(附示例)

​本篇文章给大家带来的内容是关于Java线程的生命周期的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
本篇文章给大家带来的内容是关于Java线程的生命周期的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、线程的生命周期

进程与线程一样,都具有一定的生命周期,线程的生命周期包括四个状态:创建状态、就绪状态、阻塞状态、死亡状态。

1.创建状态

1)是指使用new实例化一个线程对象,但该线程对象还未使用start()方法启动线程这个阶段,该阶段只在内存的堆中为该对象的实例变量分配了内存空间,但线程还无法参与抢夺CPU的使用权;

2)创建完毕线程对象后,启动该线程对象的是start()方法,而不是run()方法。

2.就绪状态

1)是指一个线程对象使用start()方法后到运行完run()方法的这个阶段,线程一旦就进入就绪阶段,Java虚拟机为该线程创建方法的调用栈和计数器等;

2)在某一单位时间(时间片)内,CPU只能运行一个线程,一但一个线程拥有了CPU的使用权,则该线程也可称为正在运行状态;

3)凡是处于就绪状态的线程都被视为活动的,可以使用isAlive()方法测试线程是否处于就绪状态,使用activeCount()查询当前线程所在线程池的活动线程数;

4)处于就绪状态的线程并不是运行状态,在以前的计算机很多都是单处理器的,要在同一时刻运行所有处于就绪状态的线程是不可能的,Java通过一些调度算法来保证这些线程共享使用处理器(如时间片轮转算法、独占算法等)。

3.阻塞状态:

1)阻塞状态包含四种状态(睡眠状态、阻塞状态、挂起状态、等待状态),一般来说,阻塞状态和就绪状态可以相互切换的;

2)使用sleep()方法可以线程进入睡眠状态,让其他进程得到运行机会,但是用sleep方法必须捕获InterruptedExecption异常;

3)使用suspend方法可以挂起线程(jdk1.2后已过时)、使用wait方法使线程进入等待状态(后面有一随笔会专门写)、使用I/O中断让线程进入阻塞状态。

4.死亡状态:

1)一旦线程运行完run方法,线程即进入死亡状态,Java虚拟机会销毁处于死亡状态的线程对象所占用的系统资源;

2)线程执行时遇到一个未捕获的异常,线程会被终止并进入死亡状态;调用stop方法也可以让线程进入死亡状态,但是容易造成死锁,已弃用。

5.线程生命周期如下图:

二、下面是sleep方法使线程进入睡眠状态的案例

/**
 * @author: PrincessHug
 * @date: 2019/4/12, 9:20
 * @Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class SleepDemo  implements Runnable{
    @Override
    public void run() {
        long l;
        for (int i=1;i<6;i++){
            l = System.currentTimeMillis();
            try {
                Thread.currentThread().sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            l = (System.currentTimeMillis() - l);
            System.out.println(Thread.currentThread().getName() + "线程执行了" + i + "次,耗时" + l + "毫秒。");
        }
    }
}
public class SleepDriver {
    public static void main(String[] args) {
        SleepDemo sd = new SleepDemo();
        for (int i=0;i<50;i++){
            new Thread(sd,i + "#").start();
        }
    }
}

下面是部分运行结果截图:

可以看到如果同时启动的线程越多,会导致每个线程的耗时越长。

以上就是Java线程的生命周期的介绍(附示例)的详细内容,更多请关注其它相关文章!


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 本文介绍了数模国赛的报名参加方法,包括学校报名和自己报名的途径。同时给出了建模竞赛的建议,重在历练的同时掌握方法以及弥补自己的短板。此外,还分享了论文的结构和模型求解部分的注意事项,包括数学命题的表述规范和计算方法的原理等。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
author-avatar
_流星_123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有