Java 线程调度:睡眠、连接与等待机制解析
1. 线程睡眠(Sleeping)
线程睡眠是一种更强大的让步形式。与普通的让步不同,普通让步只是表明线程愿意暂停,让其他同等优先级的线程有机会运行;而线程睡眠时,无论是否有其他线程准备好运行,该线程都会暂停。这不仅给了相同优先级的其他线程运行的机会,也让低优先级的线程有机会执行。不过,睡眠的线程会持有它已获取的所有锁,这意味着其他需要相同锁的线程即使 CPU 可用也会被阻塞。因此,应尽量避免在同步方法或块中让线程睡眠。
线程睡眠也有其有用之处,即使不需要向其他线程让步。让线程在指定的时间段内睡眠,可以编写按固定时间间隔执行的代码,例如每秒、每分钟或每 10 分钟执行一次。例如,编写一个网络监控程序,每五分钟从 Web 服务器检索一个页面,如果服务器崩溃则向网站管理员发送电子邮件,就可以实现一个在每次检索之间睡眠五分钟的线程。
线程通过调用两个重载的静态 Thread.sleep() 方法之一来进入睡眠状态:
public static void sleep(long milliseconds) throws InterruptedException
public static void sleep(long milliseconds, int nanoseconds) throws InterruptedException
虽然大多数现代计算机时钟至少具有接近毫秒的精度,但纳秒精度较为罕见。在任何特定的虚拟机上,不能保证实际能将睡眠时间精确到纳秒甚至毫秒。如果本地硬件无法支持该精度级别,睡
超级会员免费看
订阅专栏 解锁全文

139

被折叠的 条评论
为什么被折叠?



