java - JDBC 调用触发的 sun.misc.Unsafe.park

标签 java multithreading jdbc

在我们的应用程序中,我们发现线程花费大量时间通过调用 sun.misc.Unsafe.park 方法来锁定。我们注意到,这种模式通常是由对数据库的 JDBC 调用触发的。

我对Unsafe.park方法了解不多。我想知道这是否是正常行为,表明线程正在等待来自数据库的输入,或者我们的应用程序是否存在一些需要改进的同步问题。

你知道这两个是哪一个吗?或者,您知道我们可以进一步调查此事的方法吗?

最佳答案

sun.misc.Unsafe.park 与 thread.wait 几乎相同,但它使用依赖于架构的代码,因为 park 是 native 调用,它可以获得性能方面的好处(这是java.util.concurrent中的一种流行模式,例如您可以在ConcurrentLinkedQueue中看到park的用法> 和线程池)。显然,您有一个多线程环境,并且数据库连接使用线程池来达到自己的目的。在jdk中parking带来了显着的优化。

关于您使用 JDBC 的情况,我建议您的情况发生了死锁。所有线程都在等待某个事件。您可以调查死锁,我建议您阅读这篇文章:

jdbc-deadlock-avoidance

jdbc and deadlocks manual

HTH

关于java - JDBC 调用触发的 sun.misc.Unsafe.park,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40338868/

相关文章:

java - 服务器端更改客户端发送的日期/时间

java - Executor、线程池的捕获异常

java - 如何管理与动态创建的数据库的连接

mysql - java.sql.BatchUpdateException : Row x was cut by GROUP_CONCAT()

连接Oracle数据库时遇到java.sql.SQLException

java - Applet jar是浏览器下载的还是JVM下载的?

java - 如何将数据从bash脚本正确传递到java应用程序

多线程应用程序中的 C# TraceSource 类

java - 如何让ScheduleTask在某个时间执行一次任务?

java - 调用 JRuby 会显示 java 选项菜单