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