Java线程的几种状态

  1. 新建(New):线程对象已经产生但是未启动,

如通过new产生一个线程对象,但是未调用start()之前

  1. 就绪(Runnable):每个多线程系统都有排程器,排程器会从线程池中选择一个线程并启动他,当一个线程处于可执行状态时,表示它可能正处于线程池中等待排程器启动他。

如执行了start()方法以后,线程就处于可执行状态了。

  1. 运行(running):已经获取到CPU资源,正在执行run方法

当前线程的时间片如果被cpu抢占的话就变成就绪状态

  1. 死亡(dead):当一个线程正常结束,便处于死亡状态,

如一个线程的run()函数执行完毕以后这个线程就进入死亡状态

  1. 阻塞(blocked):当一个线程处于阻塞状态时,系统排程器就会忽略他,不对他进行排程。当处于阻塞状态的线程重新回到可执行状态时,它才可能重新执行。

如通过对一个线程调用wait()函数后,线程就进入阻塞状态,只有再次调用notify或notifyAll后才能回到可执行状态

阻塞本身分为几种

  • 等待阻塞:线程执行了wait,JVM会把当前线程放入等待队列
  • 同步阻塞:线程在获取对象锁的时候,如果该同步锁被其他线程占用,则JVM会把当前线程放入锁池中
  • 其他阻塞:运行的线程执行sleep(),join()或者发出IO请求时,JVM会把当前线程设置为阻塞状态,当sleep()执行完,join()线程终止,IO处理完毕线程再次恢复
image.png

Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容