在我们的应用程序中,我们看到线程花费大量时间通过调用sun.misc.Unsafe.park
方法锁定。我们已经注意到,这种模式通常是由对数据库的JDBC调用触发的。
我对Unsafe.park
方法不太了解。我想知道这是否是正常的行为,表明线程正在等待来自数据库的输入,或者我们的应用程序是否存在一些可以改进的同步问题。
您知道这是哪两个吗?另外,您知道我们可以进一步调查此事的方式吗?
最佳答案
sun.misc.Unsafe.park
与thread.wait几乎相同,但是它使用依赖于体系结构的代码,由于park
是本机调用,因此可以获得性能上的好处(这是java.util.concurrent
中的一种流行模式,例如您可以在park
和ConcurrentLinkedQueue
中看到thread pooloing
的用法)。显然,您具有多线程环境,并且db connections
将thread pool
用于自己的目的。在jdk中,parking
带来了显着的优化。
关于您使用JDBC的情况,我建议您遇到这种情况。所有线程都在等待某个事件。您可以调查deadlock
,我建议您阅读以下文章:
jdbc-deadlock-avoidance
jdbc and deadlocks manual
高温超导