Java JDBC的线程安全性

3
如果我在一个函数中有以下序列:
void UpdateDatabase(conn) {
    createStatement
    executeStaement
    getResult
}

这个 Java 调用序列在多线程情况下安全吗?

1
我认为您需要展示更多的代码片段,例如createStatementexecuteStatementgetResult使用了哪些参数。您是如何调用UpdateDatabase函数的? - Apurv
此外,这也取决于您使用的数据库。通常,数据库会管理并发请求。因此,您不必担心数据库客户端的线程安全性。 - anoopelias
可能是Is java.sql.Connection thread safe?的重复问题。 - Sumit Singh
1
请确保每个线程使用自己的连接。 - Mark Rotteveel
2个回答

2
假设您的线程不共享任何状态或以正确方式同步共享状态,则仅在查看JVM内部发生的情况时,执行才是线程安全的。更重要的是,如果您的数据仍然可能被破坏。

每个JDBC连接一次只能由一个线程使用,这正是您正在做的。但是,数据库系统定义了四个隔离级别,定义了并发事务可以看到的数据状态。如果您的并发事务不涉及相同的数据,则可以正常使用。如果涉及,请查看数据库的隔离级别。


0

如果你稍微改变一下它

void updateDatabase() {
    getConnection
    createStatement
    executeStaement
    getResult
}

它肯定是线程安全的


好的,问题是“这个调用序列是否是线程安全的”,而不是如何使其线程安全。 - Apurv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接