关于sleep()和wait(),以下描述错误的一项是(D) A、sleep是线程类(Thread)的方法,wait是Object类的方法; B、Sleep不释放对象锁,wait放弃对象锁; C、Sleep暂停线程、但监控差太仍然保持,结束后会自动恢复; D、Wait后进入待待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状
时间: 2024-04-21 14:30:10 浏览: 238
关于 sleep() 和 wait(),错误的描述是 D、Wait 后进入等待锁定池,只有针对此对象发出 notify() 方法后才能获得对象锁进入运行状态。
解析:
sleep() 和 wait() 都是 Java 中用于线程等待的方法,但它们的作用和实现方式有所不同:
- sleep() 方法是线程类(Thread)的方法,它让当前线程暂停一段时间,让出 CPU 的时间片,但不会释放对象锁。线程在调用 sleep() 方法后,会进入阻塞状态,等待指定的时间后自动恢复运行。
- wait() 方法是 Object 类的方法,它让当前线程暂停,并释放对象锁,直到其他线程调用该对象的 notify() 或 notifyAll() 方法才能继续运行。线程在调用 wait() 方法后,会进入等待状态,直到其他线程调用 notify() 或 notifyAll() 方法后才能重新获得对象锁进入运行状态。
因此,选项 A 和 B 描述都是正确的。选项 C 描述了 sleep() 方法的作用和实现方式,也是正确的。选项 D 描述的是错误的,wait() 方法不会进入等待锁定池,而是进入等待状态,等待其他线程调用 notify() 或 notifyAll() 方法后才能重新获得对象锁进入运行状态。
相关问题
5.关于sleep0和wait0,以下描述错误的一项是 ()( Asleep是线程类(Thread)的方法,wait是bject 类的方法 B.Sleep不释放对象锁,wait 放弃对象锁 C.Sleep 暂停线程、但监控状态任然保持,结束后会自动恢复 D. Wait后进入等待锁定池,只针对此对象发出 notify 方法后获取对象锁进入运行状态
描述错误的选项是 A. sleep 是线程类 (Thread) 的方法,wait 是 Object 类的方法。
实际上,sleep 和 wait 都是 Thread 类的方法,而不是 Object 类的方法。因为线程休眠和线程等待都是与线程相关的操作,只有线程才能够进行这些操作。
其他选项描述都是正确的:
- B. sleep 不释放对象锁,wait 放弃对象锁。因为 sleep 方法只是暂停当前线程,不会释放对象锁,而 wait 方法则会释放对象锁,让其他线程可以获得对象锁并执行。
- C. sleep 暂停线程、但监控状态仍然保持,结束后会自动恢复。因为 sleep 方法只是暂停线程的执行,但线程的状态(如运行状态、阻塞状态等)仍然保持,结束后线程会自动恢复执行。
- D. wait 后进入等待锁定池,只针对此对象发出 notify 方法后获取对象锁进入运行状态。因为 wait 方法会让线程进入等待锁定池,只有当其他线程调用相同对象的 notify 或 notifyAll 方法,才能够唤醒等待中的线程并获取对象锁进入运行状态。
线程sleep和wait的区别
线程的sleep()和wait()方法都可以暂停线程的执行,但是二者有明显的区别。
1. wait()方法是Object类的方法,只能在同步代码块或同步方法中使用;sleep()方法是Thread类的方法,可以在任何地方使用。
2. 调用wait()方法后,线程会释放持有的同步锁,进入等待状态;而调用sleep()方法后,线程会一直持有持有的同步锁,不会释放。
3. wait()方法必须被notify()或notifyAll()方法唤醒;而sleep()方法则可以自行唤醒。
所以说,wait()方法比sleep()方法更加灵活,但也更加复杂和危险。
阅读全文