我想检查一下我的推理是否正确。
首先,我应该提供一些关于我想要解决的问题的细节。线程(程序的一部分)执行以下操作:
考虑到这一点,下面是我对线程状态的猜测:
READY TO RUN状态TIMED WAITING状态WAITING状态WAITING状态BLOCKED状态WAITING状态WAITING状态TERMINATED状态谢谢
发布于 2012-07-02 23:04:09
首先,您用READY TO RUN描述的状态实际上是可运行。在我的单身汉论文中,我创建了一个过渡图,显示不同的线程状态以及它们应该何时改变。您还没有描述过getIn()的语义,所以我猜它只是一个随机方法。
如果线程正在执行代码,例如,在您的方法getIn()或getOut()上,它是RUNNABLE而不是WAITING。BLOCKED实际上只是一个非常短的转换状态,当线程试图声明一个锁时,总是会输入它。如果锁不可用,则线程一直被阻塞,无法执行步骤6中所暗示的另一个操作。而且,它在调用Thread.sleep()之后也不能调用一个方法,它必须等待,直到时间过去。
我会以下列方式改正:
RUNNABLETIMED WAITINGRUNNABLEBLOCKEDTIMED WAITINGBLOCKEDRUNNABLETERMINATED

免责声明:过渡没有保证。甚至可能是,JVM供应商决定以另一种方式实现底层机制,例如,它可以通过旋转等待实现阻塞。
如果您想深入研究这个主题,请使用Profiler来了解线程的状态。我自己写了一个来检测这些状态:Java并发分析器,但是也有其他的,例如VisualVM或YourKit。
https://stackoverflow.com/questions/11265289
复制相似问题