关于多线程中的Thread.sleep方法以及面试相关

本文探讨了Java多线程中Thread.sleep方法的含义和使用,包括其与yield方法的区别,并通过面试题解析了sleep方法的实践应用,如在时间片算法和抢占式操作系统中的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

今天在学习多线程的时候发现一个很有意思的方法
那就是 thread.sleep()
为什么我会对这个方法产生兴趣?
1.在使用多线程制作一个简易的卖票系统的时候,发现某个线程出现的频率很不正常,几乎要霸屏了。当我运行了10000次后发现事情不简单,因为线程来来回回就只有那两个(我使用了4个线程),这不禁让我对sleep产生了浓烈的好奇心。发现去掉sleep之后线程基本上是平均分配的,抓住鸡脚了。于是才有了这篇文章,希望可以为大家带来帮助。

一、sleep是什么?

线程睡眠:sleep是一个让当前线程暂停的方法
如果我们需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态sleep方法,sleep方法有两种重载的形式:

——static void sleep(long millis):让当前正在执行的线程暂停millis毫秒,并进入阻塞状态,该方法受到系统计时器和线程调度器的精度和准确度的影响。

——static void sleep(long millis, int nanos):让当前正在执行的线程暂停millis毫秒加nanos毫微妙,并进入阻塞状态,该方法受到系统计时器和线程调度器的精度和准确度的影响。
与此对应的方法是线程让步,即yield()方法
它也是一个Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程。

yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,完全可能的情况是:当某个线程调用了yield方法暂停之后,线程调度器又将其调度出来重新执行。

实际上,当某个线程调用了yield方法暂停之后,只有优先级与当前线程相同,或者优先级比当前线程更高的、就绪状态的线程才会获得执行的机会。

===============

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值