目录
Java线程的状态
1.new创建态:当用new关键字创建一个线程时,还没调用start时
2.runnable可运行态:程序无法判新某个时间到底是就绪还是运行态,所以这2个状态对程序就没有意义
3.waiting等待态:处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态
4.timed_waiting超时等待态:处于这种状态的线程不会被分配CPU执行时间,不过无需无期限等待被其他线程显式地唤醒,在达到一定时间后它们会自动唤醒
5.bolcked阻塞态:线程在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态
6.terminated销毁终止态:
- 当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是它已经不是一个单独执行的线程。线程一旦终止了,就不能复生
- 在一个终止的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常
线程状态:
1.NEW -> RUNNABLE -> TIMED_WAITING -> RUNNABLE -> TERMINATED
public class test {
public static void main(String[] args) throws Exception {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("执行run(),thread线程状态:" + Thread.currentThread().getState());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("sleep结束,thread线程状态:" + Thread.currentThread().getState());
}
});
System.out.println("未调用start(),thread线程状态:" + thread.getState());
thread.start();
Thread.sleep(200);
System.out.println("线程sleep,thread线程状态:" + thread.getState());
Thread.sleep(2000);
System.out.println("线程执行完成,thread线程状态:" + thread.getState());
}
}
2.NEW -> RUNNABLE -> BLOCKED -> RUNNABLE -> TERMINATED
public class test {
private static Object lock = new Object();
public static void main(String[] args) throws Exception {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("执行run(),thread线程状态:" + Thread.currentThread().getState());
synchronized(lock) {
}
System.out.println("synchronized结束,thread线程状态:" + Thread.currentThread().getState());
}
});
System.out.println("未调用start(),thread线程状态:" + thread.getState());
synchronized(lock) {
thread.start();
Thread.sleep(2000);
System.out.println("线程synchronized,thread线程状态:" + thread.getState());
}
Thread.sleep(2000);
System.out.println("线程执行完成,thread线程状态:" + thread.getState());
}
}