线程主要有6中状态
1.BLOCKED :线程等待需要的锁而挂起
2.NEW:线程还没有开始运行
3.RUNNABLE:线程当前正在执行,或者获得了cpu访问权之后开始执行
4.TERMINATED:线程执行结束
5. TIMED_WAITING:线程挂起执行一段时间 比如:wait(),sleep(),join()等待时处于这种状态
6.WAITING:线程因等待某些状态挂起执行,调用非暂停版的wait() join()时的状态
示意图:
代码示例
线程Run
class Run implements Runnable{
Thread t;
A a;
public Run(A a,String name){
this.a =a;
t = new Thread(this,name);
System.out.println(name + "\t" + t.getState());
t.start();
System.out.println(name + "\t" + t.getState());
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "\t" + t.getState());
a.foor();
System.out.println(Thread.currentThread().getName() + "\t" + t.getState());
}
}
实例A
class A {
public synchronized void foor(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试
public static void main(String[] args) {
A a = new A();
Run r1 = new Run(a,"r1");
Run r2 = new Run(a,"r2");
while(true){
System.out.println(Thread.currentThread().getName() + "\tr1\t" + r1.t.getState());
System.out.println(Thread.currentThread().getName() + "\tr2\t" + r2.t.getState());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试结果
r1 NEW
r1 RUNNABLE
r2 NEW
r2 RUNNABLE
r1 RUNNABLE
main r1 RUNNABLE
main r2 RUNNABLE
r2 RUNNABLE
main r1 TIMED_WAITING
main r2 BLOCKED
main r1 TIMED_WAITING
main r2 BLOCKED
main r1 TIMED_WAITING
main r2 BLOCKED
main r1 TIMED_WAITING
main r2 BLOCKED
r1 RUNNABLE
main r1 TERMINATED
main r2 TIMED_WAITING
main r1 TERMINATED
main r2 TIMED_WAITING
main r1 TERMINATED
main r2 TIMED_WAITING
main r1 TERMINATED
main r2 TIMED_WAITING
main r1 TERMINATED
main r2 TIMED_WAITING
r2 RUNNABLE
main r1 TERMINATED
main r2 TERMINATED
main r1 TERMINATED
main r2 TERMINATED
main r1 TERMINATED
main r2 TERMINATED
main r1 TERMINATED
main r2 TERMINATED
main r1 TERMINATED
main r2 TERMINATED