模型服务连接失败

Thread.sleep()、Object.wait()、Condition.await()、LockSupport.park() 有什么区别?

并发JavaJava 并发
分类
Java 并发
难度
未设置
来源数
1
更新时间
2026/03/28 21:25

答案

首先sleep和wait: 1. sleep不会释放锁,而wait会释放锁; 2. sleep必须传入时间参数,wait可传可不传 3. sleep等待一段时间后自动唤醒,继续执行,wait必须等待其他线程调用notify或notifyall方法,且唤醒后不一定继续执行,需要重新获得锁,如果设置了等待时间则会自动唤醒。 然后是wait和await方法: wait和await方法大致相同,不过await方法底层是使用LockSupport.park方法进行阻塞的。且在阻塞之前会把当前线程添加到条件队列,并让state变为0; 最后是sleep和park: sleep和park的功能类似,都是阻塞线程,且不会释放锁,但是park可以被另一个线程调用unpark来唤醒,而sleep需要自动唤醒。sleep会抛出interruptedExceptiron,需要进行捕获或抛出,而park不用。

相关题目(5)

Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(并发).md

knowledge_note
Question 18: Thread.sleep()、Object.wait()、Condition.await()、LockSupport.park() 有什么区别? Source answer: 首先sleep和wait: 1. sleep不会释放锁,而wait会释放锁; 2. sleep必须传入时间参数,wait可传可不传 3. sleep等待一段时间后自动唤醒,继续执行,wait必须等待其他线程调用notify或notifyall方法,且唤醒后不一定继续执行,需要重新获得锁,如果设置了等待时间则会自动唤醒。 然后是wait和await方法: wait和await方法大致相同,不过await方法底层是使用LockSupport.park方法进行阻塞的。且在阻塞之前会把当前线程添加到条件队列,并让state变为0; 最后是sleep和park: sleep和park的功能类似,都是阻塞线程,且不会释放锁,但是park可以被另一个线程调用unpark来唤醒,而sleep需要自动唤醒。sleep会抛出interruptedExceptiron,需要进行捕获或抛出,而park不用。 Reviewed answer: sleep 不释放锁、需指定时间、到时自动恢复;wait 会释放锁,可限时或无限等待,通常需 notify/notifyAll 唤醒且恢复前需重新竞争锁;await 与 wait 类似,但基于 Condition/Lock 体系,底层可借助 LockSupport.park;park 用于阻塞线程,不释放锁,可通过 unpark 唤醒,且不要求像 sleep 一样必须处理中断异常。