美文网首页
线程状态流转

线程状态流转

作者: 李昂的数字之旅 | 来源:发表于2018-04-26 10:41 被阅读0次

线程状态在Thread.java里的State枚举里定义了六种
NEW:new Thread() 但尚未启动
RUNABLE:new Thread().start()后现在会进入就绪状态,等待分配CPU即可执行
BLOCKED:被阻塞状态,线程正在获取锁。线程A想获取对象锁a,但是对象锁a已经被其他线程B占有了,而造成当前线程A被阻塞在获取锁a的阶段,A会进入锁a的锁池中,等锁a被释放时,会在锁池中选一个线程获取锁a。
WATING:等待状态是线程整等待通知被唤醒,进入原因三个:Object.wati()/Thread.join()/LockSupport.park()。t1.wait()需要其他线程执行t1.notify()/t1.notifyAll()才能唤醒;t2.join()需要等待t2执行完,当前线程才能唤醒。
TIME_WAITING:限时等待,有五种方法可以进入:Thread.sleep(1000)/Object.wait(1000)/Thread.join(1000)/LockSupport.parkNanos(1000)/LockSupport.parkUntil(1000),超过等待时间会自动进入就绪状态。
TERMINATED:线程执行结束或者报异常则结束。

sleep与wait的区别

sleep到时间后会自动进入就绪状态,wait需要其他线程调用notify/notifyAll才能唤醒。sleep不会释放锁,所以到时见后可以直接就绪;wait会释放锁,唤醒后需要再次拿到锁才能执行。

sleep与yield的区别

两者都会放弃CPU占用,sleep可以交给优先级的线程,yield可以交给优先级相同的线程。

释放锁

wait()/join()

不释放锁

sleep()/yield()

相关文章

  • 线程状态流转

    线程状态在Thread.java里的State枚举里定义了六种NEW:new Thread() 但尚未启动RUNA...

  • 线程池初探

    线程池架构图 线程池状态流转图 线程池主要参数介绍 corePoolSize: 核心线程数量 maximumPoo...

  • 线程池状态转换

    线程池状态转换流程 上一篇文章介绍了线程池的五种状态各种的含义,今天来介绍这五种状态是怎么流转的,还是看线程池的源...

  • 精选30道Java多线程面试题

    ​ 1、线程和进程的区别 2、实现线程有哪几种方式? 3、线程有哪几种状态?它们之间如何流转的? 4、线程中的st...

  • Thread相关学习之二 - JavaThread&JV

    线程生命周期 JavaThread生命周期 线程生命周期就在上述的6个状态中流转,如下图: JVMTIThread...

  • java多线程5-线程的六个状态

    按照官方的说法,线程分为这么几种状态: 我们也可以在Thread类的源码中看下状态: 下面是各个状态之间的流转:

  • 一张图弄懂java线程的状态和生命周期

    上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程。 这些状态的枚举值都定义在java....

  • TCP状态流转

    本篇主要说说TCP的状态流转。本篇图片摘自《计算机网络 自顶向下方法》。 基础 在说TCP状态流转之前,需要先说一...

  • gmp状态流转

    G 的状态流转 P 的状态流转 **通常情况下(在程序运行时不调整 P 的个数),P 只会在上图中的四种状态下进行...

  • 利用状态机处理订单状态流转(多状态流转管理)

    首先简述一个场景,订单的状态流转。 一个订单会有很多种状态:临时单、已下单、待支付、已支付、已完成、退款中等等。每...

网友评论

      本文标题:线程状态流转

      本文链接:https://www.haomeiwen.com/subject/hgpulftx.html