Java线程的生命周期、状态转换、线程调度。

Java线程的生命周期、状态转换、线程调度

  Java线程的生命周期描述了一个线程从创建到终止的整个过程,包括不同状态之间的转换以及线程调度的机制。

一、Java线程的生命周期

Java线程的生命周期包括以下几个状态:

  1. 新建状态(New):当线程对象被创建但还未调用start()方法时,线程处于新建状态。
  2. 就绪状态(Runnable):当线程调用start()方法后,线程进入就绪状态等待获取CPU时间片执行。
  3. 运行状态(Running):当线程获取到CPU时间片并开始执行时,线程处于运行状态。
  4. 阻塞状态(Blocked):线程在等待某个条件满足时会进入阻塞状态,如等待I/O操作完成获取锁等。
  5. 等待状态(Waiting):线程调用wait()方法、join()方法、park()方法等时会进入等待状态。
  6. 超时等待状态(Timed Waiting):线程调用带有超时参数的方法(如Thread.sleep()、Object.wait())时会进入超时等待状态
  7. 终止状态(Terminated):线程执行完任务或调用stop()方法终止时进入终止状态。

线程的状态可以使用 thread.getState() 获取

二、线程状态转换

线程在不同状态之间转换的过程如下:

  • 新建状态 -> 就绪状态:调用start()方法
  • 就绪状态 -> 运行状态:获取CPU时间片
  • 运行状态 -> 就绪状态:时间片用完主动调用yield()方法
  • 运行状态 -> 阻塞状态:等待I/O操作获取锁
  • 阻塞状态 -> 就绪状态:条件满足
  • 就绪状态 -> 终止状态:执行完任务或调用stop()方法

三、线程调度

Java线程调度由操作系统和Java虚拟机共同完成,操作系统负责将CPU时间片分配给不同线程,Java虚拟机负责根据线程的状态和优先级来进行调度,也就是说线程的优先执行主要还是取决于操作系统是否分配了CPU时间片,线程调度可以通过设置线程的优先级、使用synchronized关键字等机制来影响。

代码如下:

java
public class ThreadLifecycleExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            System.out.println("Thread is running");
        });

        System.out.println("Thread state: " + thread.getState()); // 输出线程状态

        thread.start(); // 启动线程
        System.out.println("Thread state after start(): " + thread.getState());

        try {
            Thread.sleep(1000); // 主线程休眠1秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Thread state after 1 second: " + thread.getState());
    }
}
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值