线程状态java
我想检查一下我的推理是否正确 首先,我应该提供一些关于我试图解决的问题的细节。线程(程序的一部分)执行以下操作:线程状态java,java,multithreading,Java,Multithreading,我想检查一下我的推理是否正确 首先,我应该提供一些关于我试图解决的问题的细节。线程(程序的一部分)执行以下操作: 开始了 它调用Thread.sleep(20ms) 它调用getIn()方法 它尝试获取锁(lock.lock()) 如果成功获得锁,它将调用Thread.sleep(100ms) 如果锁不可用,则调用waitingCond.await() 调用Thread.sleep(100ms)后,它调用lock.unlock() 它调用另一个方法getOut() 它终止(thread.join
准备运行
状态定时等待
状态等待
状态等待
状态已阻止
状态等待
状态等待
状态终止
状态谢谢首先,您用
READY TO RUN
描述的状态实际上是。在我的学士学位论文中,我创建了一个转换图,显示了不同的线程状态以及它们应该改变的时间。您还没有描述getIn()
的语义,所以我猜这只是一个随机方法
如果线程正在执行代码,例如在您的方法上执行getIn()
或getOut()
它是RUNNABLE
而不是WAITING
BLOCKED
实际上只是一个非常短的转换状态,当线程试图声明锁时,总是会进入该状态。如果锁不可用,线程将继续被阻塞,无法执行步骤6中暗示的其他操作。此外,它在调用Thread.sleep()
之后无法调用方法,它必须等待,直到时间过去
我会按以下方式更正:
RUNNABLE
定时等待
RUNNABLE
被阻止
定时等待
被阻止
RUNNABLE
终止
如果您想深入探讨这个主题,请使用探查器来找出线程的状态。我自己写了一篇文章来检测这些状态:,但也有其他一些状态,例如VisualVM或YourKit是否有任何时刻它实际处于运行状态?:)@LukasKnuth您已经中断了OP的编号,其中5.1是可选的从属步骤。你觉得这样更好吗?这对线程来说很无聊。。。还有:你没有给我们一个问题。你这是什么意思?我写下的是操作的顺序。我能给你更多的细节吗?@qxc没有,但这是StackOverflow。规则是:你问问题,我们试着回答。你没有问任何问题,只是给了我们一些信息,并告诉我们如果我们认为你的推理不正确,就进行干预。你试过这个例子吗?如果是这样的话,你的期望与你的推理不一致吗?