学习笔记:Java高级编程之多线程

线程的操作状态(阻塞)

学习内容:

流程图


注意:之所以图中有7个状态,是因为 在jdk5之后,就绪和运行状态统称为Runnable
1、new(初始化状态):在程序中用构造方法创建一个线程对象后,新的线程对象边处于新建状态,此时,它已经有相应内存空间和其他资源,但还处于不可运行状态。就是你实例化了一个对象,但是还没有开始调用方法。

2、 Runnable(可运行状态): 上面说了Runnable包含了就绪和运行状态,而且这也是核心状态。

(1)就绪状态: 新建线程对象后,调用该线程的start0方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件。
(2)运行状态: 当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run0方法。run0方法定义了该线程的操作和功能。

3、Blocked( 阻塞状态):一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。在可执行状态下,如果调用sleep0、suspend0、wait0等方法,线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程才可以转入就绪状态。

4、TimedWaiting(期限等待):使用sleep()方法, 让一个线程睡多少毫秒,这种情况下的线程就处于计时等待状态,它和无限等待状态很像,只不过该状态到了时间就自动醒,无限等待得要别的线程唤醒。

5、Wating(无期限等待):一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态,进入这个状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒。

6、Teminated(终止状态):要么因为run方法的正常运行结束,要么因为捕获的异常终止了run方法而结束。

猜你喜欢

转载自blog.csdn.net/Red_super/article/details/109062834