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 ...
随机推荐
- UIPanel
[UIPanel] UIPanel is a component that collects and manages all widgets underneath it. UIPanel is res ...
- 06.Lucen入门程序-Field
需求: 实现一个歌词搜索系统,通过关键字搜索,凡是文件名或文件内容包括关键字的文件都要找出来. 注意:该入门程序只对文本文件(.txt)搜索. Lucene中包含两个重要的类: IndexWriter ...
- 114. Flatten Binary Tree to Linked List (Stack, Tree; DFS)
Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...
- java-tip-HashMap
HashMap的基本查找过程: 先使用key.hashCode()生成哈希值,根据哈希值来确定key存放的位置 找到key在数组中的位置后,再使用key.equals()方法来找到指定的key. 1. ...
- linux系统如何更改文件权限
一. 更改文件9个属性:chmod 用这个命令修改文件属性有两种方式:数字或者符号 1. 数字类型改变文件权限 chmod (1)类unix系统的文件有9个属性分别是owner/group/other ...
- Zedboard学习(三):PL下流水灯实验 标签: fpgazynqPL 2017-07-05 11:09 21人阅读 评论(0)
zynq系列FPGA分为PS部分和PL部分. PL: 可编程逻辑 (Progarmmable Logic), 就是FPGA部分. PS: 处理系统 (Processing System) , 就是与F ...
- IPMI命令
yum -y install ipmitool/etc/init.d/ipmi start ipmitool -I open lan set 1 ipaddr 172.16.8.33ipmitool ...
- Luogu 4726 【模板】多项式指数函数
补补补…… 这个题的解法让我认识到了泰勒展开的美妙之处. 泰勒展开 泰勒展开就是用一个多项式型的函数去逼近一个难以准确描述的函数. 有公式 $$f(x)\approx g(x) = g(x_0) + ...
- 用 python 实现各种排序算法-乾颐堂
总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成 ...
- /etc/profile、~/.bash_profile等几个文件的执行过程
/etc/profile.~/.bash_profile等几个文件的执行过程 摘自:http://blog.chinaunix.net/uid-14735472-id-3190130.html 分类 ...