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个状态的更多相关文章

  1. C++ std::thread概念介绍

    C++ 11新标准中,正式的为该语言引入了多线程概念.新标准提供了一个线程库thread,通过创建一个thread对象来管理C++程序中的多线程. 本文简单聊一下C++多线程相关的一些概念及threa ...

  2. Thread系列之Thread.Sleep(0)

    线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元. 由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线 ...

  3. PHP版本VC6和VC9、Non Thread Safe和Thread Safe的区别

    链接:http://www.cnblogs.com/neve/articles/1863853.html 想更新个PHP的版本,PHP的windows版本已经分离出来了,见http://windows ...

  4. 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 ...

  5. Thread thread2 = new Thread()

    Thread thread2 = new Thread() { @Override public void run() { test.function(); } }; thread1.start(); ...

  6. Mysql thread 与 OS thread

    测试环境信息如下: OS:Ubuntu 16.04 LTS Mysql:Mysql 5.7.18,使用docker images运行的实例 Mysql如何处理client请求 在Mysql中,连接管理 ...

  7. c++并发编程之thread::join()和thread::detach()

    thread::join(): 阻塞当前线程,直至 *this 所标识的线程完成其执行.*this 所标识的线程的完成同步于从 join() 的成功返回. 该方法简单暴力,主线程等待子进程期间什么都不 ...

  8. yum安装提示错误Thread/process failed: Thread died in Berkeley DB library

    问题描述: yum 安装更新提示 rpmdb: Thread/process failed: Thread died in Berkeley DB library 问题解决: 01.删除yum临时库文 ...

  9. Thread之三:Thread Join()的用法

    一.join用法 join()和wait()不会释放锁,join()是Thread的方法,wait()是Object的方法 1.join方法定义在Thread类中,则调用者必须是一个线程 例如: Th ...

随机推荐

  1. 【HDU4405】Aeroplane_chess

    题意 飞行棋.有n+1格,开始时在0号格子,每一步都要扔一个dice(六个面,概率相同)哪一面朝上他就会向前走x+i步.当x+i大于等于N的时候,游戏结束.另外,地图上有m条航线.第i条航线可以直接从 ...

  2. 142. Linked List Cycle II (List; Two-Pointers)

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...

  3. QuickSort模板

    #include <iostream> using namespace std; struct node { int index; char name[20]; }; node data[ ...

  4. 冲刺NOIP2015提高组复赛模拟试题(五) 3.破坏基地

    3.破坏基地 描述 Description 在Z国和W国之间一直战火不断. 好不容易,W国的间谍把完整的Z国的军事基地的地图到手了. 于是W国决定再次出击,一举击破Z国的防线. W国认真研究了Z国的地 ...

  5. [GO]可见性

    GO的可见性:如果想使用别的包的函数.结构体类型.结构体成员 函数名.结构体类型.结构体成员变量名的首字母必须是大写,则为可见,反之,则只能在一个包里使用 比如本来就有一个项目叫awesomeproj ...

  6. QT学习之窗口部件

    对话框--QDialog 模态对话框与非模态对话框 模态对话框:就是相当于没关闭它之前,不能再和该应用程序的其他窗口进行交互(比如新建项目时弹出的对话框) 非模态对话框:可以与它交互,也可以与该程序中 ...

  7. 【转载】Jedis对管道、事务以及Watch的操作详细解析

    转载地址:http://blog.csdn.net/liyantianmin/article/details/51613772 1.Pipeline 利用pipeline的方式从client打包多条命 ...

  8. java.lang.NoClassDefFoundError: Could not initialize class com解决方案

    编写的时候遇到这样一个bug, java.lang.NoClassDefFoundError: Could not initialize class com 纠结了两天多,但是,没有找到答案,这个问题 ...

  9. HDU 4514 湫湫系列故事――设计风景线 (树形DP)

    题意:略. 析:首先先判环,如果有环直接输出,用并查集就好,如果没有环,那么就是一棵树,然后最长的就是树的直径,这个题注意少开内存,容易超内存, 还有用C++交用的少一些,我用G++交的卡在32764 ...

  10. SSH整合案例

    1.Hibernate框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernat ...