关于多线程的状态
--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890266.html "谢谢--
线程共有6种状态:
1.新建线程---使用new来新建一个线程
2.运行线程---调用start()方法,线程处于运行或可运行状态
3.线程阻塞---线程需要获得内置锁,当该锁被其他线程使用时,此线程处于阻塞状态
4.线程等待---当线程等待其他线程通知调度表可以运行时,此时线程处于等待状态
5.线程计时等待---当线程调用含有时间参数的方法(如sleep())时,线程可进入计时等待状态
6.终止线程--当线程的run()方法结束或者出现异常时,线程处于终止状态
注意:在写多线程程序时,要时刻注意线程的状态,不同状态下,线程能够执行的任务是不同的
使用Thread类的getState()方法可以获取到线程的状态,该方法的返回值是Thread.State,
它是线程状态类的枚举。如下表:
枚举常量 含义
NEW 新建状态
RUNNABLE 运行(可运行)状态
BLOCKED 阻塞状态
TIMED_WAITING 休眠状态
WAITING 等待状态
TERMINATED 终止状态
常用方法:
wait(): 让线程等待
notify():唤醒一个线程
notifyAll():唤醒所有线程
sleep():让线程休眠
interrupt():中断线程
yield():暂停当前线程执行其他线程
代码例子:
实现并输出当前线程的状态:
package com.xhj.thread;
/**
* 获取线程状态
*
* @author XIEHEJUN
*
*/
public class ThreadState implements Runnable {
public synchronized void waitForASecond() throws InterruptedException {
wait(500);
}
public synchronized void waiting() throws InterruptedException {
wait();
}
public synchronized void notifyNow() throws InterruptedException {
notify();
}
@Override
public void run() {
try {
waitForASecond();
waiting();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws InterruptedException {
ThreadState state = new ThreadState();
Thread thread = new Thread(state);
System.out.println("新建线程:" + thread.getState());
thread.start();
System.out.println("线程运行:" + thread.getState());
Thread.sleep(100);
System.out.println("计时等待线程:" + thread.getState());
Thread.sleep(1000);
System.out.println("等待线程:" + thread.getState());
state.notifyNow();
System.out.println("唤醒线程:" + thread.getState());
Thread.sleep(1000);
System.out.println("终止线程:" + thread.getState());
}
}