首页 > 试题广场 >

说说wait()和sleep()的区别

1. 所属的类型不同 - wt()是Object类的实例方法,调用该方法的线程将进入WTING状态。 - sleep()是Thread类的静态方法,调用该方法的线程将进入TIMED_WTING状态。 2. 对锁的依赖不同 - wt()依赖于synchronized锁,通过监视器进行调用,调用后线程会释放锁。 - sleep()不依赖于任何锁,所以在调用后它也不会释放锁。 3. 返回的条件不同 - 调用wt()进入等待状态的线程,需要由notify()/notifyAll()唤醒,从而返回。 - 调用sleep()进入超时等待的线程,需要在超时时间到达后自动返回。
发表于 2022-05-05 19:10:28 回复(1)

sleep方法是当前线程的休眠,让出cpu,但是不释放锁,它是Thread的静态方法;wait是当前线程等待,释放锁,是Object的方法。

Sleep没有释放锁,wait释放锁。 两者都可暂停线程的执行。 Wait用于线程间的通信,sleep用于暂停线程。 Wait等待过程不占用CPU,sleep仍然占用。 Wait调用后,需要别的线程调用同一个对象的notify方法。

发表于 2022-05-05 21:28:07 回复(1)
1.sleep()没有释放锁,使线程进入休眠状态,是Thread的静态方法。wait()释放锁,是Object方法 2.返回条件不同:sleep()方法到达时间后,自动恢复,而wait()方法需要使用notify()/notifyAll()唤醒线程。共同点:都可以使线程处于阻塞状态。
发表于 2022-06-19 22:44:42 回复(0)
所属的类型不同:所属的类型不同 - wt()是Object类的实例方法,调用该方法的线程将进入WTING状态。 - sleep()是Thread类的静态方法,调用该方法的线程将进入TIMED_WTING状态;对锁的依赖不同:wt()依赖于synchronized锁,它必须通过监视器进行调用,在调用后线程会释放锁。 - sleep()不依赖于任何锁,所以在调用后它也不会释放锁;返回的条件不同 - 调用wt()进入等待状态的线程,需要由notify()/notifyAll()唤醒,从而返回。 - 调用sleep()进入超时等待的线程,需要在超时时间到达后自动返回。
发表于 2022-05-08 13:35:35 回复(0)
1. 所属的类型不同
- sleep方法是当前线程的休眠,让出cpu,但是不释放锁,它是Thread的静态方法;
- wait是当前线程等待,释放锁,是Object的方法。
2.对锁的依赖不同
- wt()依赖于synchronized锁,通过监视器进行调用,调用后线程会释放锁。
- sleep()不依赖于任何锁,所以在调用后它也不会释放锁。
3.返回的条件不同
- 调用wt()进入等待状态的线程,需要由notify()/notifyAll()唤醒,从而返回。
- 调用sleep()进入超时等待的线程,需要在超时时间到达后自动返回。
编辑于 2023-02-25 16:22:51 回复(0)
1.wait()是Object类中的方法,sleep()是Thread类中的方法. 2.wait()会释放当前对象的锁进入等待,且需要Object类中的notify()/notifyAll()方法进行唤醒.sleep()不会释放锁进入等待,等待一定的时间后会自动唤醒,等待系统分配资源后进行操作,
发表于 2023-02-20 15:59:43 回复(0)
sleep是让当前线程休眠,不会让出锁,是Thread的静态方法,wait是让当前线程等待,会释放锁,是java提供的方法,skeep还会占用cpu wait不会占用cpu
发表于 2023-01-31 16:11:23 回复(0)
sleep :Thread类中的方法 释放cpu给其他线程 不释放锁资源 wait 属于Object类中的方法,释放cpu同时释放锁资源 需要notify 或者 notifyAll进行唤醒 wait方法必须配合synchronized一起
发表于 2023-10-28 21:34:19 回复(0)
sleep()没有释放锁,使线程进入休眠状态,是thread的静态方法。wait()释放锁,是object方法。2返回条件不同,sleep()方法到达时间后自动恢复,而wait()方法需要使用notify()notifyAll()唤醒线程。共同点:都可以使线程处于阻塞状态。
发表于 2023-09-01 20:10:04 回复(0)
wait:这个方***让线程进入等待状态,并且将锁释放,需要使用notify方法唤醒 sleep:让线程进入休眠,在这期间不会释放锁,不需要唤醒操作
发表于 2023-02-28 19:53:30 回复(0)
1.sleep()没有释放锁,使线程进入休眠状态,是Thread的静态方法。wait()释放锁,是Object方法 2.返回条件不同:sleep()方法到达时间后,自动恢复,而wait()方法需要使用notify()/notifyAll()唤醒线程。共同点:都可以使线程处于阻塞状态。
发表于 2022-11-05 14:36:25 回复(0)
sleep是Thread类中的静态方法,而wait是object类中的成员方法;sleep没有释放锁,而wait释放了锁,sleep可以在任意地方使用,wait只能在同步控制块或同步控制方法中使用
发表于 2022-09-13 15:50:51 回复(0)
- 作用位置不同:sleep可以作用在任意位置,wait必须在同步代码块中 - 唤醒条件不同:sleep会进入超时等待,一会自动唤醒,wait需要手动notify - 锁的处理不同:sleep不会释放锁,wait会释放锁 - 所属的类型不同:sleep是Thread类,wait是object
发表于 2022-08-10 12:07:41 回复(0)
1)所属类型不同:wait()是Object类的实例方法,调用该方法的线程将进入writing状态。sleep()是Thread类的静态方法,调用该方法的线程将进入timed_writing状态。 2)对锁的依赖不同:wait()依赖于synchronized锁,通过监控器进行调用,调用后线程会释放锁。sleep()不依赖于任何锁,所以在调用后它也不会释放锁。 3)返回的条件不同:调用wait()进入等待状态的线程,需要由notify()/notifyAll()唤醒,从而返回。调用sleep()进入超时等待的线程,需要在超时时间达到后自动返回。
发表于 2022-07-23 14:31:22 回复(0)
wait是object类的实例方法,而sleep属于thread类的实例方法。 两个方法声明的位置不同,wait可以在任意需要的场景下调用,而sleep只能在同步代码块或者同步方法肿。 如果两个方法都使用在同步代码块或者同步方法中,那么wait会释放锁,而sleep不会 释放锁。
发表于 2022-06-09 17:38:22 回复(1)
答: wait方法是Object类的实例方法,调用该方法的线程进入waiting状态。Sleep方法是Thread类的静态方法,调用该方法的线程进入Timed_waiting状态。 对锁的依赖不同,wait()依赖于synchronized锁,必须通过监视器调用,调用后线程释放锁。sleep不依赖任何锁,调用后也不会释放锁。 返回条件不同,wait后需要notify/notifyall方法唤醒。sleep后需要在超时时间到达后自动返回。
编辑于 2024-03-27 21:12:33 回复(0)
编辑于 2024-03-06 14:50:07 回复(0)
sleep():是Thread类的静态方法作用于类 wait():是Object类的方法,作用于对象 调用sleep()方法,线程进行超时等待状态 让出CPU,但不会释放锁 等待时间过去,线程进入就绪态 调用wait()方法,线程进行等待状态 释放锁 调用notify()或notifyAll()来唤醒线程 重新竞争锁
发表于 2024-02-28 19:32:06 回复(0)
sleep()是Thread类的,wait()是Object类的;sleep()会等待指定时间才恢复就绪状态,sleep()不会放弃对象锁,而是保持监控状态,wait()会放弃对象锁,只有调用对象notify()方法才会重新获取锁准备进入就绪状态
编辑于 2024-02-28 11:36:51 回复(0)
1. wait()是Object通用方法,调用wait()会让执行的代码停止,使程序进行到预执行队列中,直到被唤醒或者被中断,同时调用wait()会得是当前对象获取锁的对象并释放锁,且线程会进入到“阻塞状态” 2. sleep是Thread的方法,调用sleep()会让当前线程休眠,线程进入到“等待阻塞状态”,放弃CPU资源,让其他线程使用,直到被终止休眠、已过超时时间、或者终止,sleep不依赖锁
编辑于 2024-02-22 16:51:20 回复(0)