Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java sleep()方法如何帮助其他线程执行,因为它锁定了对象本身?_Java - Fatal编程技术网

Java sleep()方法如何帮助其他线程执行,因为它锁定了对象本身?

Java sleep()方法如何帮助其他线程执行,因为它锁定了对象本身?,java,Java,我听说java中的sleep(timeinmillizes)方法持有对象的锁,并在指定的时间段内进入睡眠状态。我还读到,它给了其他线程在睡眠期间执行的机会?如果sleep()方法锁定了其他线程想要使用的对象,那么该方法如何帮助其他线程 如果线程在睡眠前没有获得任何锁,它将不会持有任何锁。如果有,那么是的,sleep()不会给任何其他正在等待获取对象锁的线程机会,而该对象是睡眠线程已经获取锁的对象 因此,sleep()只是将线程在指定的时间内休眠,而它获取的所有锁(如果已获取)都处于锁定状态。sl

我听说java中的
sleep(timeinmillizes)
方法持有对象的锁,并在指定的时间段内进入睡眠状态。我还读到,它给了其他线程在睡眠期间执行的机会?如果
sleep()
方法锁定了其他线程想要使用的对象,那么该方法如何帮助其他线程

如果线程在睡眠前没有获得任何锁,它将不会持有任何锁。如果有,那么是的,
sleep()
不会给任何其他正在等待获取对象锁的线程机会,而该对象是睡眠线程已经获取锁的对象


因此,
sleep()
只是将线程在指定的时间内休眠,而它获取的所有锁(如果已获取)都处于锁定状态。

sleep()和
wait()
之间的主要区别在于
wait()
sleep()时释放锁或监视器
等待时不会释放任何锁或监视器。Wait用于线程间通信,sleep用于在执行时引入暂停

Thread.sleep()
保留它获取的监视器(如果有的话)


Object.wait()
将当前线程(请注意,您将其应用于对象)发送到“不可运行”状态,如
thread.sleep()
,但是,再次对对象而不是线程调用
wait()
。因为对象是锁,线程对象当前处于“非运行状态”,所以锁被释放

这是迄今为止最好的答案。1+谢谢亲爱的。我从你的回答中得到了一些新的东西。也许你需要一些
减速
,这就是为什么你使用
sleep()