java并发编程之Thread.sleep方法详解

本文深入解析了Java中Thread.sleep方法的功能与工作流程,包括使线程暂停执行、交出CPU执行时间片的具体机制,以及与Thread.yield方法的相似之处。通过代码示例展示了线程在暂停后恢复至就绪状态的过程,强调了执行结果受OS调度的影响。
摘要由CSDN通过智能技术生成

Thread.sleep方法的作用:
使当前线程暂停执行一段时间,交出cpu的执行时间片,并且在暂停期间不会参与cpu时间片的获取。直到等待时间结束恢复到就绪状态,是否执行还要看OS的调度,或者在这段时间内被中断。

Thread.sleep方法的工作流程:

  1. 挂起线程并修改其运行状态。
  2. 用sleep提供的参数设置一个定时器。
  3. 当时间结束后,定时器会触发,内核收到信号后会修改线程运行状态,例如线程会被标记为就绪状态而进入就绪队列等待OS调度。

代码demo:

public class ThreadSleepDemo {

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    long startTime = System.currentTimeMillis();
                    Thread.sleep(1000);
                    long endTime = System.currentTimeMillis();
                    System.out.println(endTime - startTime);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

//因为睡眠过后线程不一定会立即执行,还需要等待OS的调度,所以执行结果不一定是1000。

执行结果:
在这里插入图片描述

Thread.sleep(0) 的意义:

  1. Thread.sleep(0) 不是完全没有意义的。
  2. Thread.sleep(0)完成了sleep三个工作流程的第一个,使线程挂起,出让CPU资源,只是挂起之后又立即参与到cpu时间片的竞争当中。
  3. 跟Thread.yield()方法相似。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值