基于java 线程的几种状态(详解)

 更新时间:2017年09月10日 08:50:51   投稿:jingxian  
下面小编就为大家带来一篇基于java 线程的几种状态(详解)。小编觉得挺不错的,现在就想给大家,也给大家做个参考。一起跟随小编过来看看吧

线程可以有六种状态:

  1.New(新创建)

  2.Runnable(可运行)(运行)

  3.Blocked(被阻塞)

  4.Waiting(等待)

  5.Timed waiting(计时等待)

  6.Terminated(被终止)

新创建线程:

  当用new操作符创建一个新线程时,如new Thread(r),该线程还没有开始运行,它的当前状态为new,在线程运行之前还有一些基础工作要做。

可运行线程:

  一旦线程调用start方法,线程处于runnable状态。在这个状态下的线程可能正在运行也可能没有运行(也就是说Java规范中正在运行的线程仍然处于可运行状态)。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。

被阻塞线程:

  这个状态下, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchronized块里别人调用wait() 方法, 也就是线程在等待进入临界区。

等待线程:

  这个状态下是指线程拥有了某个锁之后, 调用了它的wait方法,或者线程调用了join方法 join了另外的线程, 等待被他join的线程执行结束的状态。这里要区分阻塞状态 和等待状态的区别, 一个是在临界点外面等待进入, 一个是在临界点里面wait。

计时等待线程:

  当线程调用带有超时参数的方法时会导致线程进入计时等待状态,带有超市参数的方法有Thread.sleep、Object.wait、Thread.join、Lock.tryLock以及Condition.await的计时版。

被终止的线程:

  1)线程因为run方法正常退出而自然死亡。

  2)因为一个没有捕获的异常终止了run方法而意外死亡。

  线程状态之间的转换:

           

以上这篇基于java 线程的几种状态(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis plus配置自动create_time和update_time方式

    mybatis plus配置自动create_time和update_time方式

    在处理数据时,注意时间类型的转换非常重要,不同编程环境和数据库对时间数据的处理方式各异,因此在数据迁移或日常处理中需谨慎处理时间格式,个人经验表明,了解常用的时间转换函数和方法能有效避免错误,提高工作效率,希望这些经验能为大家带来帮助
    2024-09-09
  • SpringBoot多数据源的两种实现方式实例

    SpringBoot多数据源的两种实现方式实例

    最近在项目开发中,需要为一个使用MySQL数据库的SpringBoot项目,新添加一个PLSQL数据库数据源,下面这篇文章主要给大家介绍了关于SpringBoot多数据源的两种实现方式,需要的朋友可以参考下
    2022-04-04
  • Kotlin 内联函数详解及实例

    Kotlin 内联函数详解及实例

    这篇文章主要介绍了Kotlin 内联函数详解及实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java异步线程中的CompletableFuture与@Async详解

    Java异步线程中的CompletableFuture与@Async详解

    这篇文章主要介绍了Java异步线程中的CompletableFuture与@Async详解,CompletableFuture是java中提供的一个异步执行类,@Async是Spring提供的异步执行方法,当调用方法单独开启一个线程进行调用,需要的朋友可以参考下
    2024-01-01
  • Java+Swing实现中国象棋游戏

    Java+Swing实现中国象棋游戏

    这篇文章将通过Java+Swing实现经典的中国象棋游戏。文中可以实现开始游戏,悔棋,退出等功能。感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-02-02
  • java.text.DecimalFormat用法详解

    java.text.DecimalFormat用法详解

    这篇文章主要为大家详细介绍了java.text.DecimalFormat用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Spring集成MyBatis 及Aop分页的实现代码

    Spring集成MyBatis 及Aop分页的实现代码

    这篇文章主要介绍了Spring集成MyBatis 及Aop分页的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Java中的CopyOnWriteArrayList解析

    Java中的CopyOnWriteArrayList解析

    这篇文章主要介绍了Java中的CopyOnWriteArrayList解析,ArrayList是非线程安全的,也就是说在多个线程下进行读写,会出现异常,既然是非线程安全,那我们就使用一些机制把它变安全不就好了,需要的朋友可以参考下
    2023-12-12
  • @insert mybatis踩坑记录,实体接收前端传递的参数

    @insert mybatis踩坑记录,实体接收前端传递的参数

    这篇文章主要介绍了@insert mybatis踩坑记录,实体接收前端传递的参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解Struts2中json 相互引用死循环解决办法

    详解Struts2中json 相互引用死循环解决办法

    本篇文章主要介绍详解Struts2中json 相互引用死循环解决办法,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01

最新评论