gpt4 book ai didi

java - 如何在多线程环境中生成 PreparedStatements?

转载 作者:行者123 更新时间:2023-11-30 07:30:26 24 4
gpt4 key购买 nike

我有一个多线程代码的工作版本,但是我对我的 PreparedStatement-wrapper 类是非线程安全的感到不满意。所以我决定在 ThreadLocal 中生成 PreparedStatements 以使包装器线程安全。

SQLExceptions 立即开始向我招手。底层的 Oracle 错误是 ORA-00060 deadlock detected,根据互联网,它应该只发生在写入场景中。我的陈述都是只读的。它出现在一些模糊的 ACL 包中,我既没有听说过也没有有意访问过。

我花了一些时间和精力准备并测试了一个假设,即生成一个 Connection 对象并从一个 DataSource 对象准备一个语句不应该同时发生,因为数据库的访问控制可能不是“线程安全的”(尽管数据源肯定是)。有人可以证实或否认这一发现吗?

如果确实如此,是否有最佳实践来避免在多线程应用程序中同时生成 PreparedStatements?

编辑:根据异常文本的要求:

Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-00060: deadlock detected while waiting for resource
ORA-06512: at "XXX.PKG_ACL", line 129
ORA-06512: at "XXX.PKG_ACL", line 459
ORA-06512: at "XXX.PKG_UTILS", line 1933
ORA-06512: at line 6

最佳答案

Can someone confirm or deny that finding?

我还没有听到任何类似的消息,如果它确实存在,它可能纯粹是一个实现细节。你能发布你的堆栈跟踪吗(当然是通过剥离个人信息)?

此外,您尝试使 PreparedStatement 线程安全而不是依赖准备语句池/缓存的原因是什么?或者更具体地说,是哪种分析促使您实现 ThreadLocal PreparedStatement

关于java - 如何在多线程环境中生成 PreparedStatements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com