sleep 与 wait 的区别 — 程序设计选择题
题目
线程 P、Q 竞争同一把锁对象 lock。P 先获得锁进入 synchronized(lock) 块,调用 lock.wait() 释放锁进入等待,随后被 Q 调用 lock.notify() 唤醒并重新获得锁继续执行。若 P 在进入同步块后改用 Thread.sleep(1000) 而非 wait(),则关于两个调用的比较,下列说法正确的是:
A. 两者都在同步块内调用,因此都会释放 lock 锁,Q 都能立刻获得锁
B. wait() 释放 lock 锁、需 notify() 唤醒;sleep(1000) 不释放锁,Q 在 1 秒内无法进入同步块
C. sleep(1000) 属于 Object 类方法,需其他线程 notify() 才能恢复
D. wait() 不释放锁,sleep(1000) 释放锁,因此后一种情况下 Q 反而能更快进入同步块