java多线程的几种状态
本文最后更新于 1296 天前,其中的信息可能已经有所发展或是发生改变。

介绍

线程的状态划分中操作系统的(也可说是早期的单线程状态划分)和java线程的状态有些许不同。其中操作系统的线程状态分为五种,java线程的线程状态分为六种。

操作系统线程状态

新建状态(NEW)

当用new操作符创建一个线程操作时,例如new Thread(r),线程还没有开始运行,此时线程处于新建状态。当一个线程处于新生状态时,程序还没有开始运行线程中的代码。

就绪状态(RUNNABLE)

一个新创建的线程并不自动开始运行,要执行线程,必须调用start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法,当start()方法返回后,线程就处于就绪状态。

运行状态(RUNNING)

当线程获得cpu时间后,它进入运行状态,真正开始执行run()方法。

阻塞状态(BLOCKED)

阻塞状态是正在运行的线程没有运行结束,暂时让出cpu,这时其他处于就绪状态的线程就可以获得cpu时间,进入运行状态。

死亡状态(DEED)

有两个原因会导致线程死亡
(1)run方法正常退出而自然死亡。
(2)一个未捕获的异常终止了run方法而线程猝死。

状态图

操作系统线程状态图

java线程状态

新建状态(NEW)

线程刚被创建,但还没有调用start()方法。

运行状态(RUNNABLE)

正在java虚拟机中运行。但是在操作系统层面,对应就绪或者运行两种状态。所以该状态是指可以被运行,具体有没有运行要看底层操作系统的资源调度。

阻塞状态(BLOCKED)

线程阻塞与锁;请求获取monitor lock时其他线程已经占用了该monitor lock。需要得到monitor lock才可以进入RUNNABLE。

等待状态(WAITTING)

等待其他线程显式地唤醒。阻塞与等待的区别在于阻塞是被动的获取monitor lock。而等待是主动,通过调用Object.wait()等方法进入。

超时等待状态(TIME_WAITTING)

无需等待其他线程显式地唤醒,在一定时间后被系统自动唤醒。通常是调用Thread.sleep()方法。

中止状态(TERMINATED)

可以是线程结束任务之后结束也可产生异常而结束。

状态图

java线程状态图

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇