博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中wait()与sleep()的区别
阅读量:6307 次
发布时间:2019-06-22

本文共 1073 字,大约阅读时间需要 3 分钟。

最近在做面试题的时候看到这道题,复习了一遍《Thinking in Java》,在此记录这个答案

类的区别

  • wait()来自于 java.lang.Object,任何对象都有此方法
  • sleep()来自于 java.lang.Thread,调用的对象为线程

用法上的区别

看一下jdk的描述:

wait():Causes the current thread to wait until either another thread invokes the

java.lang.Object.notify() method or the java.lang.Object.notifyAll()method for this object, or a specified amount of time has elapsed.

使当前线程挂起,当对象调用java.lang.Object.notify()或者java.lang.Object.notifyAll()或者时间到期,则从wait()中恢复执行

sleep():Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.

在指定的时间内使当前执行的线程睡眠(暂停执行)

同步与锁的不同

wait()与sleep()最主要的区别就在于同步与锁,wiat()必须放在synchronized block中,否则会在program runtime时扔出java.lang.IllegalMonitorStateException异常。

  • wait()期间对象锁是释放的
  • 调用sleep()的时候锁并没有被释放,调用yield()也属于这种情况

    synchronized(LOCK) {       Thread.sleep(1000); // LOCK is held}synchronized(LOCK) {       LOCK.wait(); // LOCK is not held}

一般而言,wait()用于线程间的通信,sleep()用于线程状态的控制

参考资料

转载地址:http://zgixa.baihongyu.com/

你可能感兴趣的文章
写给创始人的期权问答及实操白皮书(连载一)
查看>>
jenkins集成sonarqube
查看>>
Sed、Awk和grep 学习笔记(一)
查看>>
row_number()over函数的使用
查看>>
viewPort(浏览器窗口的整个显示区域)
查看>>
公司Xen server虚拟化中虚拟机磁盘文件丢失的处理办法
查看>>
关于垂直对齐方式vertical-align
查看>>
特朗普:美国尚未与中国就中兴事宜达成任何协议
查看>>
Java并发编程之美
查看>>
idea快捷键使用
查看>>
静态变量初始化
查看>>
开源项目--JCIFS
查看>>
大型分布式网站架构技术总结
查看>>
Linux 常用指令
查看>>
javascript 的call()与apply()的区别
查看>>
zabbix通过SNMPv2监控DELL服务器的硬件
查看>>
CentOS 6与CentOS 7网络管理
查看>>
atime、mtime、ctime讲解
查看>>
我的友情链接
查看>>
保护眼睛——设置WIN7和XP 窗体、Chrome、IE网页背景颜色
查看>>