状态NEW, RUNNABLE, TERMINATED
new: 线程实例化后,还从未执行start()方法时的状态。
runnable: 线程进入运行的状态。
terminated: 线程被销毁时的状态。
public class MyThread extends Thread{
public MyThread(){
System.out.println("构造方法中的状态:" + Thread.currentThread().getState());
}
@Override
public void run(){
System.out.println("run方法中的状态:" + Thread.currentThread().getState());
}
}
public class Run {
public static void main(String[] args){
try {
MyThread t = new MyThread();
System.out.println("main方法中的状态1:"+t.getState());
Thread.sleep(1000);
t.start();
Thread.sleep(1000);
System.out.println("main方法中的状态2:"+t.getState());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TIMED_WAITING
线程TIMED_WAITING代表线程执行了Thread.sleep()方法,呈等待状态,等待时间到达,继续向下运行。
public class MyThread extends Thread{
@Override
public void run(){
try {
System.out.println("begin sleep");
Thread.sleep(10000);
System.out.println(" end sleep");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class Run {
public static void main(String[] args){
try {
MyThread t = new MyThread();
t.start();
Thread.sleep(1000);
System.out.println("main方法中的状态:"+t.getState());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
BLOCKED状态
BLOCKED状态出现在某一个线程在等待锁的时候。
public class MyService {
synchronized static public void serviceMethod(){
try {
System.out.println(Thread.currentThread().getName()+" 进入了业务方法 "+Thread.currentThread().getState());
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class MyThread1 extends Thread{
@Override
public void run(){
MyService.serviceMethod();
}
}
public class MyThread2 extends Thread{
@Override
public void run(){
MyService.serviceMethod();
}
}
public class Run {
public static void main(String[] args){
try {
MyThread1 t1 = new MyThread1();
MyThread2 t2 = new MyThread2();
t1.setName("A");
t2.setName("B");
t1.start();
t2.start();
Thread.sleep(1000);
System.out.println("main方法中的t1状态:"+t1.getState());
System.out.println("main方法中的t2状态:"+t2.getState());
} catch (Exception e) {
e.printStackTrace();
}
}
}
WAITING状态
状态waiting是线程执行了Object.wait()方法后所处的状态
public class MyService {
private Object object = new Object();
public void print(){
synchronized(object){
try {
System.out.println(Thread.currentThread().getName()+"线程");
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Run {
public static void main(String[] args) throws InterruptedException{
final MyService m = new MyService();
Runnable runnable = new Runnable(){
@Override
public void run() {
m.print();
}
};
Thread t = new Thread(runnable,"A");
t.start();
Thread.sleep(1000);
System.out.println(t.getState());
}
}