在Java中,线程可以进入休眠状态,这样它就不会占用进程,并且其他线程可以有机会运行。这是通过调用 sleep() 来完成的。
但是,与调用 wait() 不同,线程在调用 sleep() 之后,将不会释放它一直持有的锁。既然这个线程仍然持有锁,那么其他线程如何在无法获得未释放的锁的情况下有机会运行?
最佳答案
他们不能;其他需要获取 sleep 线程持有的锁的线程将阻塞,直到它们能够获取该锁。没有办法像在显式锁上尝试获取那样后退,因此线程被卡住。
线程在持有锁时不应 hibernate 。如果一个线程没有做一些有用的事情,它就不需要持有锁。
要进入 hibernate 状态并释放锁,请使用 wait 方法。除了中断(应该用于取消)之外,Sleep 没有任何方法可以缩短其 sleep 时间,wait 让线程得到通知。
关于java - 在Java中,在当前线程被调用sleep()后,其他线程如何有机会运行但仍然持有锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622320/