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. sql解决主键冲突

    在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突.当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即忽略.更新或者替换. 1.忽略 insert ign ...

  2. JS遍历子孙树

    function fn(dataList,parent_id){     var result = [] , temp;     for(var i in dataList){         if( ...

  3. TCP与UDP与HTTP协议

    http:是用于www浏览的一个协议.tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.R ...

  4. Win10 提升系统响应速度

    转载百度经验: https://jingyan.baidu.com/article/54b6b9c0e9d61e2d583b4719.html 1.鼠标左键点击开始按钮,然后点击菜单中的设置,进入设置 ...

  5. 使用 XML-RPC 为 C++ 应用程序启用 Web 服务

    http://www.ibm.com/developerworks/cn/webservices/ws-xml-rpc/ 引言 Internet 现在的受欢迎程度越来越高,由于这个原因及其固有的优势, ...

  6. eclipse在线安装mybatis generator插件

    转自:http://blog.csdn.net/u012283609/article/details/67640433 安装步骤: 打开eclipse菜单栏help–>Eclipse Marke ...

  7. MapReduce的初次尝试

    ====前提: 搭建好集群环境(zookeeper.hadoop.hbase). 搭建方法这里就不进行介绍了,网上有很多博客在介绍这些. ====简单需求: WordCount单词计数,号称Hadoo ...

  8. 4.4.3 Java中的指针:Unsafe类

    java多线程编程的无锁CAS底层都是通过 Unsafe进行操作的:源码如下 public final boolean compareAndSet(int expect, int update) { ...

  9. Java Decompiler(Java反编译工具)

    参考:http://blog.csdn.net/yulei_qq/article/details/24175547 Java Decompiler可以对整个jar包进行反编译,也可以将其集成到ecli ...

  10. Union、Union All、Intersect、Minus

    转自:http://www.2cto.com/database/201208/148795.html Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All: ...