Java线程生命周期

当你需要使用Java线程在多线程环境下进行编程时,理解Java的线程周期与线程的状态是非常重要的。通过实现Runnale接口或者继承Thread类,我们可以创建线程,为了启动一个线程,我们需要创建一个Thread对象,并且调用它的start()方法,以便以线程的方式来执行run()方法。

Java中的线程生命周期

下面的图展示在Java中线程的不同状态,我们可以创建一个Java线程,并调用start()方法来启动它,但是线程的状态是如何从Running变为Blocked,这依赖与操作系统实现的线程调度算法,Java对此并没有足够的控制权。

New

当我们创建一个新线程对象的时候,需要时候new操作符,此时线程的状态便是New。在这个时候,线程并不是可被调度的,它只是Java语言的一个内部状态。

Runnable

当我们调用Thread对象的start()函数时,它的状态变为Runnable。 控制权被给予线程调度程序来完成它的执行。 是否立即运行此线程或在运行之前将其保持在可运行线程池中,取决于线程调度程序的实现。

Running

线程正在执行时,状态变为Running。 线程调度程序从可运行线程池中选择一个线程,并将其状态更改为正在运行,然后CPU开始执行这个线程。一个线程可以将正在运行的进程状态更改为Runnable,Dead或Blocked。在该状态时,线程将执行run()方法的逻辑。

Blocked/Waiting

一个线程可以通过join()方法,去等待另外一个线程的执行完成;也可以等待一些资源可用,例如生产者消费者问题或IO资源,此时线程的状态将变为Waiting。 线程等待状态结束后,状态变为Runnable,并移回到可运行线程池。

Dead

一旦线程完成执行,它的状态就变成Dead。

(完)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

系统监控工具 Tsar

Tsar是淘宝的一个用来收集服务器系统和应用信息的采集报告工具,如收集服务器的系统信息(cpu,mem等),以及应用数据(nginx、swift等),收集到的数...

2076
来自专栏python学习之旅

Python笔记(三):构建发布模块

(一)     准备工作 1.   新建一个模块(名称自定义),存放要发布的模块代码。 2.   新建一个setup.py的模块(存放模块的元数据,描述相关信息...

3658
来自专栏13blog.site

could not resolve host: github.com 问题解决办法

向github提交代码时出现问题,如图: ? 代码push失败,提示could not resolve host: github.com 解决办法: 1、打开终...

4235
来自专栏从零开始的linux

用shell添加用户

调试添加用户的脚本 # sh -x useradd.sh alex + '[' 1 -lt 1 ']' + id alex + useradd alex + ...

3296
来自专栏Python小屋

使用Python把多个图片拼接成为长图

本文主要演示Python扩展库pillow中Image对象的paste()方法用法,并且测试用的所有图片具有相同尺寸,大家可以在此基础上进行改写和扩展。 另外...

3875
来自专栏java架构师

Hadoop学习2--Linux准备及环境准备

1、环境安装: 虚拟机:VMware Player 系统:Ubuntu12 注意事项:注意位数,包括系统,java,Hadoop 2、切换账号 当前登录账号是自...

2846
来自专栏电光石火

删除eclipse多余的工作空间

找到eclipse\configuration\.settings\org.eclipse.ui.ide.prefs文件,配置的命名空间就在这个文件中,双击打开...

21310
来自专栏挖掘大数据

教程说明:HBase下载、安装与配置

HBase是建立在Hadoop文件系统之上的分布式面向列的数据库,本文将介绍HBase的下载、安装与配置。

2510
来自专栏不想当开发的产品不是好测试

postman也可以使用F12功能

背景: 做过接口测试的话,大多数都知道或使用过postman工具,使用postman的时候,有时候希望也可以像chrome一样使用F12功能,这样方便观察一些数...

2119
来自专栏Golang语言社区

Golang语言--Coroutine可能存在的死锁

直接上代码: 1. 第一种情况, 如果没有select{}, main 主线程不会等待coroutine运行,导致coroutine得不到机会运行。 You ...

38110

扫码关注云+社区