Java sleep()方法如何帮助其他线程执行,因为它锁定了对象本身?
我听说java中的Java sleep()方法如何帮助其他线程执行,因为它锁定了对象本身?,java,Java,我听说java中的sleep(timeinmillizes)方法持有对象的锁,并在指定的时间段内进入睡眠状态。我还读到,它给了其他线程在睡眠期间执行的机会?如果sleep()方法锁定了其他线程想要使用的对象,那么该方法如何帮助其他线程 如果线程在睡眠前没有获得任何锁,它将不会持有任何锁。如果有,那么是的,sleep()不会给任何其他正在等待获取对象锁的线程机会,而该对象是睡眠线程已经获取锁的对象 因此,sleep()只是将线程在指定的时间内休眠,而它获取的所有锁(如果已获取)都处于锁定状态。sl
sleep(timeinmillizes)
方法持有对象的锁,并在指定的时间段内进入睡眠状态。我还读到,它给了其他线程在睡眠期间执行的机会?如果sleep()
方法锁定了其他线程想要使用的对象,那么该方法如何帮助其他线程 如果线程在睡眠前没有获得任何锁,它将不会持有任何锁。如果有,那么是的,sleep()
不会给任何其他正在等待获取对象锁的线程机会,而该对象是睡眠线程已经获取锁的对象
因此,
sleep()
只是将线程在指定的时间内休眠,而它获取的所有锁(如果已获取)都处于锁定状态。sleep()和wait()
之间的主要区别在于wait()
在sleep()时释放锁或监视器
等待时不会释放任何锁或监视器。Wait用于线程间通信,sleep用于在执行时引入暂停
Thread.sleep()
保留它获取的监视器(如果有的话)
Object.wait()
将当前线程(请注意,您将其应用于对象)发送到“不可运行”状态,如thread.sleep()
,但是,再次对对象而不是线程调用wait()
。因为对象是锁,线程对象当前处于“非运行状态”,所以锁被释放 这是迄今为止最好的答案。1+谢谢亲爱的。我从你的回答中得到了一些新的东西。也许你需要一些减速
,这就是为什么你使用sleep()
。