sleep()--线程休眠

上一篇:join()—等待线程执行终止

sleep()是Thread类下的一个静态方法
在这里插入图片描述
另外一个sleep(long time,int nanos)也是静态的,,最终还是调用了sleep()方法
在这里插入图片描述
当一个执行中的线程调用了Thread的sleep()方法后,调用线程会暂时让出指定时间的执行权,也就是在这期间,该线程不参与cpu的调度 但是该线程所拥有的监视器资源比如锁,不会让出,也就是线程在sleep()期间,一直占有锁,不会释放。

在sleep()时间到了之后,线程正常返回,处于就绪状态然后参与cpu的调度,获取到cpu资源后继续执行。

代码示例:

public class SleepTest {

    private Object object = new Object();

    public SleepTest() {

        Thread thread1 = new Thread(() -> {
            synchronized (object){
                try {
                    System.out.println("线程1   获取到对象锁");
                    System.out.println("线程1   开始休眠");
                    Thread.sleep(3000);
                    System.out.println("线程1   休眠结束");
                    System.out.println("线程1   执行结束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        Thread thread2 = new Thread(() -> {
            synchronized (object){
                try {
                    System.out.println("线程2   获取到对象锁");
                    System.out.println("线程2   开始休眠");
                    Thread.sleep(3000);
                    System.out.println("线程2   休眠结束");
                    System.out.println("线程2   执行结束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });


        thread1.start();
        thread2.start();
    }

    public static void main(String[] args) {
        new SleepTest();
    }

}

执行结果:
在这里插入图片描述
在线程休眠期间,另外一个线程没有执行,,说明在线程休眠期间,不会释放object的锁,因此其他线程无法获取到则不能执行。

sleep()也是线程阻塞的一种方式;

与wait()的差别:

sleep(long time)wait(long time)
Thread类下的一个静态方法Object类的方法
使线程休眠期间不释放锁阻塞期间,释放锁

与wait()的相同点:
1、调用期间都释放cpu调度权,即不参与线程调度器的调度
2、阻塞线程
3、阻塞时间到了之后,正常返回,处于就绪状态

posted @   有锦  阅读(13)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示