示例:
public static void main(String[] args) throws InterruptedException {
synchronized (lock) {
for (; ; ) {
System.out.println("每5秒打印一次");
lock.wait(5000);
}
}
}只有一个单线程循环等待几秒钟并唤醒打印信息,没有其他线程调用通知,它是如何自动唤醒自己的?
发布于 2021-04-27 20:17:38
你认为5000在那里是什么意思?
lock.wait(5000)的意思是:启动一个计时器,等待以下3种情况中的任何一种发生first:
lock引用的同一对象上调用notifyAll() (或notify),则正常退出此方法。.interrupt(),则通过引发InterruptedException.退出
因此,如果没有人调用notify,那么这将等待5秒。这只是一种愚蠢的编写Thread.sleep(5000)的方式。
发布于 2021-04-27 20:18:47
有一个调度器,它的任务是运行线程。调度程序知道线程,以及它们当前是否可运行。它大概有一个等待计时器到期的对象队列。这些线程不能“立即”运行,但当它们的时间用完后,它们就可以运行了。
这是与大多数操作系统中相同的原则。执行“睡眠N秒”系统调用。有一些东西可以让线程再次运行。
https://stackoverflow.com/questions/67282746
复制相似问题