在我们的应用程序中,我们发现线程花费大量时间通过调用 sun.misc.Unsafe.park
方法来锁定。我们注意到,这种模式通常是由对数据库的 JDBC 调用触发的。
我对Unsafe.park
方法了解不多。我想知道这是否是正常行为,表明线程正在等待来自数据库的输入,或者我们的应用程序是否存在一些需要改进的同步问题。
你知道这两个是哪一个吗?或者,您知道我们可以进一步调查此事的方法吗?
最佳答案
sun.misc.Unsafe.park
与 thread.wait 几乎相同,但它使用依赖于架构的代码,因为 park
是 native 调用,它可以获得性能方面的好处(这是java.util.concurrent
中的一种流行模式,例如您可以在ConcurrentLinkedQueue
中看到park
的用法> 和线程池
)。显然,您有一个多线程环境,并且数据库连接
使用线程池
来达到自己的目的。在jdk中parking
带来了显着的优化。
关于您使用 JDBC 的情况,我建议您的情况发生了死锁。所有线程都在等待某个事件。您可以调查死锁
,我建议您阅读这篇文章:
HTH
关于java - JDBC 调用触发的 sun.misc.Unsafe.park,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40338868/