1,Thread 概念以及Thread 的6个状态
Thread 有6个状态 , NEW, RUNNABLE , BLOCKED, WATTING, TIMED WAITING, TERMINATED

1.NEW
至今尚未启动的线程的状态。
2.RUNNABLE
可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。
3.BLOCKED
受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。
4.WAITING
某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态
不带超时值的 Object.wait
不带超时值的 Thread.join
LockSupport.park
5.TIMED_WAITING
具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:
Thread.sleep
带有超时值的 Object.wait
带有超时值的 Thread.join
LockSupport.parkNanos
LockSupport.parkUntil
6.TERMINATED
已终止线程的线程状态。线程已经结束执行。
测试代码如下
package com.zyguo.thread;
public class SleepRunnable implements Runnable{
private int sleepTime;
public SleepRunnable( int sleepTime ){
this.sleepTime = sleepTime;
}
@Override
public void run() {
try {
System.out.println( Thread.currentThread() + " begin sleep " + this.sleepTime );
Thread.sleep( sleepTime );
System.out.println( Thread.currentThread() + " end sleep " + this.sleepTime );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.zyguo.thread;
import java.lang.Thread.State;
public class ThreadStatus {
public static void main(String[] args) {
final Thread t1 = new Thread( new SleepRunnable( 5000 ) );
final Thread t2 = new Thread( new SleepRunnable( 10000 ) );
System.out.println("new t1 status=" + t1.getState() );
System.out.println("new t2 status=" + t2.getState() );
Thread monitor = new Thread( new Runnable() {
public void run() {
//只要 t1 和 t2 有一个没停,就不停止监控
while ( ! ( t1.getState() == State.TERMINATED && t2.getState() == State.TERMINATED ) ) {
System.out.println("t1 status:" + t1.getState() + ",t=" + System.currentTimeMillis() );
System.out.println("t2 status:" + t2.getState() + ",t=" + System.currentTimeMillis() );
try {
Thread.sleep( 1000 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("t1 status:" + t1.getState() + ",t=" + System.currentTimeMillis() );
System.out.println("t2 status:" + t2.getState() + ",t=" + System.currentTimeMillis() );
}
} );
monitor.start();
t1.start();
t2.start();
}
}
结果如下
new t1 status=NEW
new t2 status=NEW
t1 status:RUNNABLE,t=1426735950026
Thread[Thread-0,5,main] begin sleep 5000
t2 status:RUNNABLE,t=1426735950026
Thread[Thread-1,5,main] begin sleep 10000
t1 status:TIMED_WAITING,t=1426735951040
t2 status:TIMED_WAITING,t=1426735951040
t1 status:TIMED_WAITING,t=1426735952055
t2 status:TIMED_WAITING,t=1426735952055
t1 status:TIMED_WAITING,t=1426735953070
t2 status:TIMED_WAITING,t=1426735953070
t1 status:TIMED_WAITING,t=1426735954085
t2 status:TIMED_WAITING,t=1426735954085
Thread[Thread-0,5,main] end sleep 5000
t1 status:TERMINATED,t=1426735955100
t2 status:TIMED_WAITING,t=1426735955100
t1 status:TERMINATED,t=1426735956115
t2 status:TIMED_WAITING,t=1426735956115
t1 status:TERMINATED,t=1426735957130
t2 status:TIMED_WAITING,t=1426735957130
t1 status:TERMINATED,t=1426735958145
t2 status:TIMED_WAITING,t=1426735958145
t1 status:TERMINATED,t=1426735959160
t2 status:TIMED_WAITING,t=1426735959160
Thread[Thread-1,5,main] end sleep 10000
t1 status:TERMINATED,t=1426735960175
t2 status:TERMINATED,t=1426735960175
1,Thread 概念以及Thread 的6个状态的更多相关文章
- C++ std::thread概念介绍
C++ 11新标准中,正式的为该语言引入了多线程概念.新标准提供了一个线程库thread,通过创建一个thread对象来管理C++程序中的多线程. 本文简单聊一下C++多线程相关的一些概念及threa ...
- Thread系列之Thread.Sleep(0)
线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元. 由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线 ...
- PHP版本VC6和VC9、Non Thread Safe和Thread Safe的区别
链接:http://www.cnblogs.com/neve/articles/1863853.html 想更新个PHP的版本,PHP的windows版本已经分离出来了,见http://windows ...
- Part 92 Significance of Thread Join and Thread IsAlive functions
Thread.Join & Thread.IsAlive functions Join blocks the current thread and makes it wait until th ...
- Thread thread2 = new Thread()
Thread thread2 = new Thread() { @Override public void run() { test.function(); } }; thread1.start(); ...
- Mysql thread 与 OS thread
测试环境信息如下: OS:Ubuntu 16.04 LTS Mysql:Mysql 5.7.18,使用docker images运行的实例 Mysql如何处理client请求 在Mysql中,连接管理 ...
- c++并发编程之thread::join()和thread::detach()
thread::join(): 阻塞当前线程,直至 *this 所标识的线程完成其执行.*this 所标识的线程的完成同步于从 join() 的成功返回. 该方法简单暴力,主线程等待子进程期间什么都不 ...
- yum安装提示错误Thread/process failed: Thread died in Berkeley DB library
问题描述: yum 安装更新提示 rpmdb: Thread/process failed: Thread died in Berkeley DB library 问题解决: 01.删除yum临时库文 ...
- Thread之三:Thread Join()的用法
一.join用法 join()和wait()不会释放锁,join()是Thread的方法,wait()是Object的方法 1.join方法定义在Thread类中,则调用者必须是一个线程 例如: Th ...
随机推荐
- JAVA中List的三个子类。
JAVA中List的三个子类分别是:ArrayList,Vector,LinkList.下面就来比较一下他们的不同. ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高. Ve ...
- 【LA2957 训练指南】运送超级计算机【二分,最大流】
题意: 宇宙中有n个星球,你的任务是用最短的时间把k个超级计算机从星球S运送到星球T.每个超级计算机需要一整艘飞船来运输.行星之间有m条双向隧道,每条隧道需要一整天的时间来通过,且不能有两艘飞船同时使 ...
- 141. Linked List Cycle (List; Two-Pointers)
Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...
- 86. Partition List (List)
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- 26-三个水杯(bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有 ...
- CTE 中字符串拼接
1>cte语法 1.1>基础语句和递归语句中必须有字段 1.2>最后只能跟一条查询语句 1.3>字符串拼接,要将拼接的字段转成字符串类型,cast(fieldName as n ...
- python实现高效率的排列组合算法-乾颐堂
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...
- 深入理解yield-乾颐堂
yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: 1 2 3 def ad ...
- 导入excel精华版
//须引入 NPOI, NPOI.OOXML, NPOI.Openxml4Net, NPOI.OpenxmlFormats等程序集 自己去下载吧 NPOI组件很好用不可能下不到自己去吧,通常去百度网盘 ...
- logback与log4j比较
摘自:https://www.cnblogs.com/smile361/p/7592684.html logback与log4j比较 更快的执行速度: 基于我们先前在log4j上的工作,logback ...