13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

线程包括哪些状态,状态之间是如何变化?

1. 线程状态-六种状态

线程的状态可以参考JDK中的Thread类中的枚举State,存在六种状态

创新互联建站长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为伊美企业提供专业的网站设计、成都网站建设伊美网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

public enum State {
//尚未启动的线程的线程状态
  NEW,

  //可运行线程的线程状态
  RUNNABLE,

//线程阻塞等待监视器锁的线程状态
  BLOCKED,

//等待线程的线程状态
  WAITING,

//具有指定等待时间的等待线程的线程状态(有限等待)
  TIMED_WAITING,

 //已终止线程的线程状态。线程已完成执行
  TERMINATED;
}

六种状态介绍:

新建(NEW)

可运行(RUNNABLE):

终结(TERMINATED)

阻塞(BLOCKED)

等待(WAITING)

有时限等待(TIMED_WAITING)

其它情况(只需了解)

2. 线程状态-五种状态

五种状态的说法来自于操作系统层面的划分

  1. 涵盖了 java 状态中提到的阻塞等待有时限等待
  2. 多出了阻塞 I/O,指线程在调用阻塞 I/O 时,实际活由 I/O 设备完成,此时线程无事可做,只能干等

3. wait和sleep方法的不同?

共同点

wait() ,wait(long) 和 sleep(long) 的效果都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态

不同点

1.方法归属不同

2.锁特性不同(重点)

3. 线程状态面试题

面试官:线程包括哪些状态,状态之间是如何变化的?

候选人:

在JDK中的Thread类中的枚举State里面定义了6中线程的状态分别是:新建、可运行、终结、阻塞、等待和有时限等待六种。

关于线程的状态切换情况比较多。我分别介绍一下:

当一个线程对象被创建,但还未调用 start 方法时处于新建状态,调用了 start 方法,就会由新建进入可运行状态。如果线程内代码已经执行完毕,由可运行进入终结状态。当然这些是一个线程正常执行情况。

如果线程获取锁失败后,由可运行进入 Monitor 的阻塞队列阻塞,只有当持锁线程释放锁时,会按照一定规则唤醒阻塞队列中的阻塞线程,唤醒后的线程进入可运行状态。

如果线程获取锁成功后,但由于条件不满足,调用了 wait() 方法,此时从可运行状态释放锁等待状态,当其它持锁线程调用 notify() 或 notifyAll() 方法,会恢复为可运行状态。

还有一种情况是调用 sleep(long) 方法也会从可运行状态进入有时限等待状态,不需要主动唤醒,超时时间到自然恢复为可运行状态。


网站题目:线程包括哪些状态,状态之间是如何变化?
文章网址:http://cdbrznjsb.com/article/cdssdpp.html

其他资讯

让你的专属顾问为你服务