狀态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狀态
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());
}
}