Java刷题知识点之线程的几种可用状态(新建、可运行、运行、阻塞、死亡)

简介:
https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=13

 

 

 

 

 

 

 

1、 新建( new ):新创建了一个 线程对象
2、 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程) 调用了该对象 的  start  ()方法。该状态的线程位于可运行线程池中, 等待被线程调度选中,获 取 cpu 的使用权 。
3、 运行( running ):可运行状态( runnable )的线程 获得了  cpu  时间片( timeslice ) ,执行程序代码。
4、 阻塞( block ):阻塞状态是指线程因为某种原因 放弃了  cpu  使用权,也即让出了 cpu timeslice , 暂时停止运行。直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。
  阻塞的情况分三种:
    (一)、 等待阻塞:运行( running )的线程执行 o .  wait  ()方法, JVM 会把该线程 放 入等待队列( waitting queue )中。
    (二)、 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该 同步锁 被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。
    (三)、 其他阻塞: 运行( running )的线程 执行  Thread  .  sleep  (  long  ms  )或  t  .  join  ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞
         状态。 当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。
5、 死亡( dead ):线程 run ()、 main () 方法 执行结束,或者因 异常退出了  run  ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

 

 
 
 
 
 
 
  简单帮助记忆
 
可以用早起坐地铁来比喻这个过程:
  还没起床:sleeping
  起床收拾好了,随时可以坐地铁出发:Runnable
  等地铁来:Waiting
  地铁来了,但要排队上地铁:I/O阻塞
  上了地铁,发现暂时没座位:synchronized阻塞
  地铁上找到座位:Running
  到达目的地:Dead


本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/7417255.html,如需转载请自行联系原作者
相关文章
|
3天前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
18 0
|
4天前
|
JavaScript Java Android开发
在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
12 1
|
5天前
|
安全 Java API
Java并发基础-启动和终止线程
Java并发基础-启动和终止线程
15 0
|
5天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
13 0
|
1天前
|
Java 调度
【Java基础】 线程状态转化
Java线程状态转化
13 2
|
3天前
|
监控 Java API
Java 程序设计 第八章 线程
Java 程序设计 第八章 线程
|
3天前
|
存储 安全 Java
Java多线程编程--JUC
Java多线程编程
|
4天前
|
Java API
详细探究Java多线程的线程状态变化
Java多线程的线程状态主要有六种:新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)。线程创建后处于NEW状态,调用start()后进入RUNNABLE状态,表示准备好运行。当线程获得CPU资源,开始执行run()方法时,它处于运行状态。线程可以因等待锁或调用sleep()等方法进入BLOCKED或等待状态。线程完成任务或发生异常后,会进入TERMINATED状态。
|
4天前
|
存储 安全 Java
Java多线程中线程安全问题
Java多线程中的线程安全问题主要涉及多线程环境下对共享资源的访问可能导致的数据损坏或不一致。线程安全的核心在于确保在多线程调度顺序不确定的情况下,代码的执行结果始终正确。常见原因包括线程调度随机性、共享数据修改以及原子性问题。解决线程安全问题通常需要采用同步机制,如使用synchronized关键字或Lock接口,以确保同一时间只有一个线程能够访问特定资源,从而保持数据的一致性和正确性。
|
4天前
|
监控 安全 Java
Java多线程的使用
Java多线程允许程序同时执行多个任务,提高了系统的整体性能和响应速度。通过创建Thread类或其子类的实例,或使用Runnable接口,Java开发者可以定义并发执行的代码段。多线程在处理复杂任务、资源共享、网络通信等方面具有显著优势,但也需要注意线程安全、同步和死锁等问题。Java提供了丰富的API和工具来处理这些并发问题,使多线程编程更加高效和可靠。

热门文章

最新文章