七叶笔记 » java编程 » Java中wait与sleep的区别讲解(wait有参及无参区别)

Java中wait与sleep的区别讲解(wait有参及无参区别)

1. wait() 与wait( long timeout ) 区别

不同点:

1.wait( long timeout) :当线程超过了设置时间之后,自动恢复执行;而wait() 无线等待状态。

2. 使用无参的wait方法,线程会进入WAITING; 使用有参的wait方法,线程会进入TIMED_WAITING。

共同点:

1. 无论是有参的wait方法还是无参的wait方法,它都可以使用当前线程进入休眠状态。

2.无论是有参的wait方法还是无参的wait方法,它都可以使用notify / ontifyAll进行唤醒。

2. wait(0) 与 sleep(0)区别

wait (0) : 无限期等待下去,相当于wait();

sleep(0) :相当于Thread.yeild() , 让出CPU执行权,重新调度,但是sleep(0) 会继续执行。

3. wait 和sleep 释放代码

wait 和 sleep 在有所的情况下的锁处理行为是完全不同的:

wait方法(不管是有参还是无参)在执行的时候都会释放锁;而sleep 方法不会释放锁。

4. wait 与 sleep 区别

相同点:

1. 都是可以让线程进入休眠

2. 都可以响应Interrupt(中断)请求

不同点:

1. wait必须配合synchronized一起使用;而sleep不需要。

2. wait 属于Object(对象)的方法;而sleep属于Thread(线程)的方法。

3. sleep 不释放锁;而wait释放锁。

4. sleep 必须要传递一个数值类型的参数;而wait可以不传参。

5. sleep 让线程进入到TIMED_WAITING状态;而无参的wait方法让线程进入了WAITING状态。

6. 一般情况下,sleep只能等待超时时间之后再回复执行;而wait可以接受notify / notifiAll之后就绪执行。

(MS):

1.为什么 wait 释放锁⽽ sleep 不释放锁?

【JVM 强制语法检查,wait ⽅法默认等待⽆期限】

2.为什么 wait 要放在 Object 中?

【wait 使⽤要加锁,也就是要操作锁,锁是针对对象级别的⽽⾮线程级别的,线程和对象是⼀对多,所以 wait 最便利的⽅式是放在 Object 中】

到此这篇关于Java中wait与sleep的区别讲解(wait有参及无参区别)的文章就介绍到这了,更多相关java wait与sleep内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章