Java中sleep()方法和wait()方法的异同点 您所在的位置:网站首页 点5和点8有什么区别 Java中sleep()方法和wait()方法的异同点

Java中sleep()方法和wait()方法的异同点

#Java中sleep()方法和wait()方法的异同点| 来源: 网络整理| 查看: 265

前言

前几篇文章讲过wait()系列方法后,我们来对比看看它和sleep()方法有什么异同点。如果不了解wait()方法也没关系,文章中我会附上涉及到的文章。我们先从sleep()方法讲起,彻底搞清楚二者的区别。

一.sleep()方法是用来做什么的?

sleep()方法可以使线程进入WAITING状态,而且不会占用CPU资源,也不会释放锁,直到过了规定的时间后再执行后续代码,休眠期间如果被中断,会抛出异常,并会清空中断状态标记。

上面这句话信息量有点大,我来给大家细细品读

二.sleep()方法的特点 1. sleep()方法可以使线程进入WAITING状态。

这个和wait()方法一致,都会使线程进入等待状态。

2.不会占用CPU资源。

不会浪费系统资源,可以放心使用。

3.不释放锁。

我记忆的口诀分享:sleep()方法是抱着锁睡觉。

线程休眠期间是不会释放锁的,线程会一直保持在等待状态。

4.响应中断。

遇到中断请求时,支持当前线程中断,并抛出sleep interrupted异常。

代码和分析参考文章 《Java如何正确停止线程(三种场景)》中的“场景二”或“场景三”,代码运行结果和分析都非常简洁和全面,建议阅读下。

三.sleep()方法的两种代码写法

1.Thread.sleep(timeout)

此方式参数只能是毫秒,如果参数是负值,则会抛出异常。虽然常见,但不推荐使用。

2.TimeUnit.SECONDS.sleep(timeout)

此种方式可以接收负数参数,当参数为负数,阅读源码会发现,它会跳过执行,所以不会抛出异常。此种方式的可读性高,可以指定小时、分钟、秒、毫秒、微秒等参数,所以更加优秀,推荐使用这种写法。

四.sleep()方法和wait()方法的异同点 1.相同点

①.都可以使线程堵塞

②.都可以响应中断

2.不同点

①.wait()、notify()方法必须写在同步方法中,是为了防止死锁和永久等待,使线程更安全,而sleep()方法不需要有这个限制。

②.wait()方法调用后会释放锁sleep()方法调用后不会释放锁。

③.sleep()方法必须要指定时间参数;wait()方法可以指定时间参数。

④.两个方法所属类不同,sleep()方法属于Thread类;wait()属于Object类中,放在Object类中是因为Java中每个类都可以是一把锁。

总结

本文讲解了sleep()方法的主要知识,并对比了wait()方法和sleep()方法的区别。喜欢本文请收藏、点赞、关注。关于多线程的其他文章请点击下方链接查看。

建议收藏:

关于synchronized关键字、wait()、notify()方法的系列教程,请参考以下文章:

《Java中线程安全和线程不安全解析和示例》

《Java官方文档创建线程的两种方式及优点和缺点分析》

《Java如何正确停止线程(三种场景)》

《设计模式之生产者消费者模式》

《Java多线程wait()和notify()系列方法使用教程》

《Java多线程中notifyAll()方法使用教程》

《Java两个线程交替打印奇偶数(两种方法对比)》

《Java中synchronized实现类锁的两种方式及原理解析》

《Java中synchronized实现对象锁的两种方式及原理解析》

《Java中Synchronized的可重入性和不可中断性的分析和代码验证》

《Java多线程访问Synchronized同步方法的八种使用场景》



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有