小编典典

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

java

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

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

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

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

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

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

谢谢


阅读 225

收藏
2020-09-28

共1个答案

小编典典

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

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

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

2020-09-28