春招修仙系列 —— 线程状态

概述:

线程:

线程是程序功能的最小单位,一个进程可以由多个线程组成,共同完成系统功能,线程共享系统分配给进程的资源。

进程:

进程是系统分配资源的最小单位,程序运行时会生成一个进程实例。

Java中的线程状态:

在 jdk1.5之后,线程的状态被明确定义在内部的枚举类中即 Java.lang.Thread.State,共分为以下5种状态:

初始态 NEW:

创建一个Thread对象,但是还未调用start()方法启动线程的状态,此时线程就初始初始状态,这个状态仅在线程创建并还未调用的时候存在,是一个不可逆的状态,即一个线程只能启动一次,即如果程序调用了两次start()方法,则会抛出异常:java.lang.IllegalThreadStateException

运行态 RUNNABLE:

在Java中,运行态也包括就绪态:

就绪态:

该状态下的线程已经获得执行任务所需要的所有资源,只需要CPU分配执行权就可以运行,所有的就绪态线程放在就绪队列里

运行态:

获得CPU执行权,正在执行的线程,同一个CPU同一时刻只有一条处于运行状态的线程

阻塞态 BLOCKED:

当一条正在执行的线程请求某一资源失败的时候,就会进入阻塞状态。而在java中,阻塞态专指请求锁失败的时候的状态,由一个阻塞队列存放所有阻塞态的线程,处于阻塞态的线程会不断的请求资源,一旦请求成功,就会进入就绪队列,等待执行。

等待态 WAITING:

当线程中调用join() wait()等方法时,当前线程进入等待状态。等待其他线程将其唤醒。也有一个等待队列用来存放所有的等待状态的线程,进入等待专挑的线程会释放锁。

超时等待态 TIMED_WAITING:

当运行中的线程,调用sleep()时,就会进入该状态,它和等待态一样,并不是获取不到资源进入的该状态,而是一种主动的进入,等待经过一段超时时间后,在返回当前线程,继续执行,sleep是不释放持有的锁。

终止态 TERMINATED:

线程执行结束的一种状态,不可逆
注:

扫描二维码关注公众号,回复: 5018273 查看本文章
  • sleep()方法只是释放CPU的执行权,而不放弃持有的锁和占用的资源
  • wait() notify() / notifyAll() 必须放在同一个同步块中

线程状态的转换:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Kirito19970409/article/details/86565813
今日推荐