我使用JConsole查看一个线程,它显示了
name: Thread-6
state:BLOCKED sun.misc.Launcher$AppClassLoader@19821f ,owner: Thread-3
blocked Count:199,645 Waited Count: 2,610199645和2610:这是一件坏事吗?
发布于 2012-04-25 22:46:56
如果您的应用程序没有运行满足您的需求,根据这些数字,这可能是因为存在大量的锁争用。等待是指它等待通知(Object.wait()),但被阻塞意味着它试图获取锁,但无法获取,因为另一个线程持有该锁。
来自http://geekexplains.blogspot.ca/2008/07/threadstate-in-java-blocked-vs-waiting.html
阻塞状态和等待/ TIMED_WAITING状态之间的区别?
当一个线程调用Object.wait方法时,它会释放所有获取的监视器,并进入wait (如果我们调用wait方法的超时版本,则为TIMED_WAITING )状态。现在,当通过对同一对象的notify()或notifyAll()调用通知线程时,线程的等待状态结束,线程开始尝试重新获得它在等待调用时获得的所有监视器。在同一时间,可能有几个线程试图重新获得(或者可能是第一次获得)它们的监视器。如果多个线程试图获取特定对象的监视器,则只有一个线程(由JVM调度器选择)被授予监视器,而所有其他线程都进入阻塞状态。
发布于 2020-08-21 19:39:48
线程阻塞进入或重新进入监视器的总次数。
https://stackoverflow.com/questions/7170235
复制相似问题