最专业的脚本、辅助学习平台,易语言培训/C++教程学习基地
1 2 3
天野学院 门户 编程人生 查看内容

程序猿进阶多线程—— 线程的运行状态

2018-8-15 17:30| 发布者: admin| 查看: 801| 评论: 0

摘要: 就绪(Runnable):线程准备运行,不一定立马就能开始执行。 运行中(Running):进程正在执行线程的代码。 等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。 阻塞状态(Blocked):等待 I/O 操作完成。 同步 ...

线程的状态

这里写图片描述

      线程在执行过程中,可以处于下面几种状态:

就绪(Runnable):线程准备运行,不一定立马就能开始执行。 
运行中(Running):进程正在执行线程的代码。 
等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。 
阻塞状态(Blocked):等待 I/O 操作完成。 
同步阻塞(Locking):等待获取锁。 
死亡(Dead):线程完成了执行。

      下面详细说明:

  • 就绪状态 - Runnable

      当我们创建好线程后,Thread t = new Thread();,开始调用t.start();方法后,线程就从初始状态转变为就绪状态。

      就绪状态下的线程,在等待操作系统调用,操作系统会根据不同的调度算法来进行调度线程。比如操作系统使用时间片轮转算法。

  • 运行状态 - Running

      当操作系统选定要运行的线程后,这个线程就会从就绪状态转为运行状态。这个时候,运行状态的线程就会执行我们重写的run()方法。

  • 阻塞状态 - blocked

      有的时候,我们需要给线程之间一些缓冲时间,通常使用Sleep()让子线程和主线程错开。有的时候我们需要线程按照一定的顺序执行,这个时候我们可以使用b.join(),安排在线程b执行完成后再执行。

      所以在sleep()join()调用的过程中,线程会处于阻塞状态。只有等sleep()join()完成后,线程才会再次进入就绪状态,等待cpu调用。

  • 等待状态 - waiting

      运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒

  • 锁池状态 - locking

      当执行中的线程进入synchronized同步块的时候,没有获取到锁的线程,就会进入锁池状态,获取到锁的线程执行完成后,锁解除,进入就绪状态。

  • 死亡状态 -dead

      线程执行完成,进入死亡状态。


鲜花

握手

雷人

路过

鸡蛋

最新评论

相关分类

关闭

站长推荐上一条 /4 下一条

 
 
工作时间:
9:00-22:00
天野学院2群:648301976(建议加好友再发信息,有时候直接发消息可能收不到))
返回顶部