Java代码中Thread.sleep(0) 的意义

一、问题 你以为你是一个高级工程师,实际上也就只是会用几个框架的API而已!最近代码中出现了一个 Thread.sleep(0),引起了大家的注意。有人说是写错了,有人说是没意义可以删掉!是这样吗?通过本文希望大家看完后有更大的收获! 我们知道 Thread.sleep() 方法能让线程休眠一段时间,但是当这个参数为0,还有意义吗?假设现在的时间是 2018-10-16 18:00:00.000,当我调用一下Thread.sleep(0)后,在2018-10-16 18:00:00.001这个时间当前休眠的这个线程会被唤醒吗? 要回答这个问题,我们先要看 Thread.sleep() 到底做了什么?既然是 Sleep 0 毫秒,那到底休眠了吗? 二、说明 1、任务调度 我们知道处理器是一个操作系统执行任务的工具,线程是一个操作系统执行任务的基本单位,处理器的数量决定了不可能所有线程都能同时得到执行。这就需要通过某种算法来进行任务调度。Unix系统使用的是时间片算法,而Windows 是一个抢占式的多任务操作系统。 关于抢占式,维基百科有下面的定义: In computing, preemption…

Continue Reading →