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

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

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


前言

今天在学习多线程的时候发现一个很有意思的方法
那就是 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方法暂停之后,只有优先级与当前线程相同,或者优先级比当前线程更高的、就绪状态的线程才会获得执行的机会。

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

sleep方法和yield方法的区别

sleep方法暂停当前线程后,会给其他线程执行机会,不会理会其他线程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值