我听说java中的sleep(timeInMilliseconds)
方法保持对象的锁定并且在指定的时间段内进入休眠状态。而且我还读到它让其他线程有机会在那个休眠期执行? sleep()
方法如果能够锁定其他线程想要使用的对象,它如何帮助其他线程?
答案 0 :(得分:1)
sleep()
和wait()
之间的主要区别在于wait()
释放锁定或监视器,而sleep()
在等待时不释放任何锁定或监视器。等待用于线程间通信,而睡眠用于在执行时引入暂停。
Thread.sleep()
保留它已获取的监视器(如果有)。
Object.wait()
将当前线程(请注意您将其应用于Object)发送到“Not Runnable”状态,如Thread.sleep()
,但是,再次在对象上调用wait()
,而不是线程。由于对象是锁,并且线程对象当前处于“非运行状态”,因此锁被释放。
答案 1 :(得分:0)
如果线程在休眠之前没有获得任何锁定,则它不会保持任何锁定。如果有,那么,sleep()
将不会给等待获取锁定睡眠线程已获得锁定的对象的任何其他线程的机会。
因此,sleep()
只是让线程在指定时间内进入休眠状态,并在锁定状态下获取所有锁(如果已获取)。