Java线程的五种状态介绍
Java中的线程生命周期可以分为五个主要状态,这些状态由JVM中的线程调度器控制,包括:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。每个线程可以在此生命周期中进入不同的状态。
新建状态
当新创建一个线程时,该线程还没有开始执行,并且尚未由JVM分配线程所需的所有资源。这个状态下线程的代码并没有开始运行,直到调用start()方法后,该线程才会转换为就绪状态。
示例:
public class NewStateThread implements Runnable {
public void run(){
System.out.println("新建状态线程正在运行");
}
public static void main(String[] args) {
Thread thread = new Thread(new NewStateThread());
thread.start();
}
}
就绪状态
当线程准备好运行并且等待CPU执行时,线程处于就绪状态。这意味着线程已经分配了所有必要的资源,它等待JVM的线程调度器选择并分配CPU来执行线程的任务。
示例:
public class ReadyStateThread implements Runnable {
public void run(){
System.out.println("就绪状态线程正在运行");
}
public static void main(String[] args) {
Thread thread = new Thread(new ReadyStateThread());
thread.start();
}
}
运行状态
当JVM执行线程的run()方法时,线程处于运行状态。线程始终处于运行状态,除非执行以下操作之一:
- 线程通过调用其自身的Thread.yield()方法放弃CPU控制,并进入就绪状态。
- 线程被JVM中断。
- 线程执行完成并死亡。
示例:
public class RunStateThread implements Runnable {
public void run(){
System.out.println("运行状态线程正在运行");
}
public static void main(String[] args) {
Thread thread = new Thread(new RunStateThread());
thread.start();
}
}
阻塞状态
当线程被阻塞并且暂时停止执行时,线程处于阻塞状态。线程在几种情况下可能被阻塞:
- 等待输入/输出操作完成。
- 等待获取某个对象的同步锁。
- 线程调用 Thread.sleep(long) 方法,或等待某个方法的唤醒。
示例:
public class BlockStateThread extends Thread {
public void run(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("阻塞状态线程运行结束");
}
public static void main(String[] args) {
Thread thread = new BlockStateThread();
thread.start();
System.out.println("主线程运行结束");
}
}
死亡状态
当线程执行完成或由于异常退出时,线程处于死亡状态。已死亡的线程无法再次启动。但是,程序中启动的其他线程可以继续运行。
示例:
public class DeadStateThread extends Thread {
public void run(){
System.out.println("死亡状态线程正在运行");
}
public static void main(String[] args) {
Thread thread = new DeadStateThread();
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("死亡状态线程运行结束");
}
}
以上就是Java线程的五种状态介绍的完整攻略,通过这些状态我们可以更好地管理线程的行为,从而提高软件的性能和健壮性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java线程的五种状态介绍 - Python技术站