面试题之wait()和sleep()方法区别

一、简介

sleep()和wait()方法区别

方法

sleep()

wait()

概念

使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)

导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法

方法属于哪一个类

sleep()是线程线程类Thread中的方法

wait()是Object的方法

是否释放对象锁

调用 sleep()方法,线程不会释放对象锁

调用 wait() 方法线程会释放对象锁,以便其他正在等待该资源的线程得到该资源进而运行

方法执行的地方

可以在任何地方使用

只能在同步方法或同步块中使用

是否自动唤醒

sleep(millionseconds)需要指定一个睡眠时间,时间一到会自然唤醒

wait()需要配合notify()或者notifyAll()使用,才能唤醒

是否需要捕获异常

sleep()方法必须捕获异常

wait()方法必须捕获异常

说明

调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复

调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,需再次获得对象锁才会进入运行状态

发布了220 篇原创文章 · 获赞 93 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/104235903
今日推荐