基于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 线程的几种状态(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- JSP PageContext.getException()方法:获取当前的异常对象
- 如何使用mybatis generator代码生成?
- java – 用于Yubico OpenPGP智能卡的PGP数据加密
- java – String,String Builders,Character Arrays和Arrayl
- Java – 使用runtime.getRuntime().exec运行Excel
- Java中的泛型是否避免所有ClassCastExceptins?
- java – 为什么链接String.trim()会抛出异常?
- 如何从JDBC截断Postgresql的表
- Java 8类型推断错误,将lambda表达式赋给Object类型的变量
- Java 8:从文件夹/子文件夹中获取文件