多线程——线程的运行状态
线程的存在状态
创建状态:线程刚刚被创建出来的状态。当线程处于“新线程“状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常。
可运行状态:当线程对象调用了start()方法后的状态。start()只是告诉系
统“所需资源已经到位,可以投入运行”,此时线程并不一定马上开始运行,
因为一个CPU只能运行一个线程,是否真正开始运行,还要看当前系统的调
度情况,比如CPU的占用情况等。
阻塞状态:所谓阻塞,是指线程从运行状态进入的暂停运行状态。
死亡状态:当run()方法执行完毕,或别的线程调用stop()方法,线程进入死
亡态。线程死亡后,其占据的资源被系统收回,将无法再通过调用start()进
入可运行状态
线程的运行状态图
线程的让步
public static void yield() 方法
线程的休眠与唤醒
创建线程
package com.foot.lesson03;
public class SleepThread extends Thread {
@Override
public void run() {
try {
Thread.sleep(5 * 1000 * 60);//挂起该线程5分钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("程序运行完毕!");
}
}
运行该线程并设置唤醒触发的事件
package com.foot.lesson4;
import java.io.IOException;
import com.foot.lesson03.SleepThread;
public class App {
public static void main(String[] args) {
SleepThread st = new SleepThread();
st.start();
System.out.println("线程被挂起5分钟,回车键唤醒该线程!");
try {
System.in.read();
st.interrupt();//唤醒该线程
System.out.println("//////////////////////////////////");
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果
当时间不足5分钟,运行结果如下:
线程被挂起5分钟,回车键唤醒该线程!
//这里手动输入文字并输入回车键//
//////////////////////////////////
java.lang.InterruptedException: sleep interrupted
程序运行完毕!
at java.lang.Thread.sleep(Native Method)
at com.foot.lesson03.SleepThread.run(SleepThread.java:7)
当时间足够5分钟的时候,运行结果如下:
线程被挂起5分钟,回车键唤醒该线程!
程序运行完毕!
上一篇: JUC - Lock接口
下一篇: 备战秋招:面试题2