提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
今天在学习多线程的时候发现一个很有意思的方法
那就是 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方法暂停当前线程后,会给其他线程执行机会,不会理会其他线程