当前位置: 首页 > 面试题库 >

了解java.lang.Thread.State:等待(停车)

叶翰林
2023-03-14
问题内容

首先,一个非常愚蠢的问题,我只是想知道等待中的“停车”是什么意思?是线程正在等待驻留,还是线程刚刚处于驻留状态,因此处于等待状态?当发生停车时,会占用多少CPU
/内存资源?存放线程的目的是什么?

其次,通过查看Java线程API中的
park方法

除非有许可,否则出于线程调度目的禁用当前线程。

如果许可证可用,则将其消耗掉,并立即返回呼叫;否则,呼叫将立即返回。否则,当前线程将出于线程调度目的而被禁用,并处于休眠状态,直到发生三件事之一.....

英语不是我的主要语言,因此我很难理解,我打算将“许可”作为一种“停车线许可”,因此出现以下问题:

  • 这是什么意思,什么是“许可证”,以及谁以及如何检查这些许可证?
  • 这是什么意思:“如果有许可证,就将其消耗掉”,是“停放”了吗?
  • 接下来,如果第二点是真的,那么“停车”和“休眠”之间有什么区别?如果获得许可,我可以将其永久停放,否则,我可以将其“休眠”吗?

谢谢


问题答案:

许可是指继续执行的许可。停车意味着中止执行直到获得许可为止。

Semaphore的许可不同,的许可LockSupport与线程相关联(即,将许可授予特定的线程)并且不会累积(即,每个线程只能有一个许可,当线程消耗许可时,它就会消失)。

您可以通过调用授予线程许可unpark()。线程可以通过调用挂起其执行,直到允许使用许可(或线程被中断或超时到期等)为止park()。当允许使用许可时,驻留的线程将使用它并退出park()方法。



 类似资料:
  • 问题内容: 我认为我对 .NET 的经验可能会影响我的理解,因此我想一些代码示例: 我正在尝试让快速控制器在返回响应之前等待5秒: 该代码不起作用,浏览器不断加载和加载,从不显示任何内容。 我基于此SO答案构建的函数以及控制器方法,是基于(对)其工作原理的(错误的)理解,因此我需要进行一些澄清和更正: 1.我应该什么时候使用? 据我了解,您应该在函数调用之前使用。这样对吗?另外,为什么我可以在返回

  • 为此,我创建了一个名为的单例。这个类处理所有的输入阅读内容。我创建了一个名为的方法,它将回调作为参数。在这个方法中,我创建了一个新线程,并在其中等待使用的输入。这个类还有方法,它向上面描述的线程发送中断消息。下面是该类的当前实现: 这个代码极不可靠。我一会儿就告诉你我的意思。我制作了一个名为Client的玩具类,在中,我用计时器模拟了消息收入。 以下是它的工作原理: 我知道这个问题非常长(也许是不

  • 我正在努力学习如何正确使用async Wait,但我对它有点共同的想法。 在片段中,我试图构建一个对象数组,其中包含我需要的关于我在组件中上传的文件的信息。问题是this.fileInfo中的对象并没有完全等待返回编码图像的promise,而是在我console.logthis.fileInfo时返回此输出: 如您所见,关键图像是一个值未定义的ZoneAwarePromise。你能帮我修一下吗?

  • null 所以我面临一个问题,如果打开,等待输入,如何停止它?我尝试过将它放在线程中并或使用作为标志,但它并没有停止

  • 我正在尝试将数据库调用移出控制器,以清理并使其可测试。当它们在控制器中时,一切都会顺利进行。我将它们移出控制器,并添加了一个异步,以确保我们等待。否则,我将调用的中的函数。现在,一旦我使用async/await,控制器中的函数就会认为没有用户,因为它没有等待。 有几个关于异步等待的SO问题,但我没有找到一个解决我的问题。我确实验证了返回了我的用户,并添加了控制台日志来显示路径。 节点猫鼬异步等待似

  • 我有一个类似菜单的结构,在一个菜单项上悬停会在一段延迟后打开一个子菜单。我在使用Selenium的确定性方法(=不使用Thread.Sleep)对该菜单进行web测试时遇到问题。 要悬停在元素上,我需要使用Selenium的生成器类() 如何将这两种方法结合起来?我还没有找到一种方法来添加WebDriverWait。直到调用Actions对象。解决我的问题的推荐方法是什么? 我在SOF上发现了各种