在Java中,如何在sleep()上调用当前线程但仍保持锁定后,其他线程是否有机会运行?

use*_*271 0 java concurrency multithreading sleep

在Java中,线程可以进入休眠状态,这样它就不会占用进程,而其他线程也有机会运行.这是通过调用sleep()来完成的.

但是,与调用wait()不同,线程在调用sleep()之后不会释放它所持有的锁.由于这个线程仍然持有锁,其他线程如何能够在无法获得未发布的锁的情况下运行?

Nat*_*hes 5

他们不能; 需要获取睡眠线程持有的锁的其他线程将阻塞,直到它们可以获取它.没有办法像显式锁定上的tryacquire一样退出,因此线程被卡住了.

持有锁时线程不应该睡眠.如果一个线程没有做一些有用的事情,它不需要持有一个锁.

要进入休眠状态并释放锁定,请使用wait方法.除了中断(应该用于取消)之外,Sleep没有任何方法可以缩短其休眠时间,等待让线程得到通知.