【问题标题】:java multithreading and mysqljava多线程和mysql
【发布时间】:2012-05-23 17:13:01
【问题描述】:

我有一个运行一些多线程进程的应用程序。
在每个线程中,我都与我的 mysql 数据库共享相同的连接,该连接存储对线程运行很重要的信息。

通常在多线程时我必须检查同步,所以我想同时共享同一个资源,但是我必须对 mysql 做同样的事情吗?

我正在使用 innodb,它在使用它时会锁定行,我不知道我是否也需要在我的代码中查看对它的访问权限。

据我了解,我是否这样做并不重要,因为服务器会自行管理其连接,但我又不确定。

【问题讨论】:

标签: java mysql multithreading


【解决方案1】:

java 中的Connections 不保证是线程安全的。

除此之外,Mysql(尤其是 innodb)可以安全地处理多个连接。

在对您的问题的评论中(由 Emil Vikström),针对您的问题提出了解决方案;

(编辑)我引用:

您是否已经查看了与该主题相关的多个问题之一?例如:Java Threads and MySQLIs MySQL Connector/JDBC thread safe? – Emil Vikström

【讨论】:

  • 我确实读过这些问题,但正如你所说,在逻辑问题上,我不明白在使用与共享 innodb 的连接时会发生什么问题。如果我在线程之间使用共享的简单连接,我应该同步它们吗?或者mysql知道如何单独使用它们..
  • 我自己没有尝试过,但是使用 1 个连接对象的 2 个线程或更多线程可能会产生未定义的结果。这是因为底层实现可能会维护实际的连接状态(socket、resultSets 等)。最佳实践是使用连接池,每个线程 1 个连接或同步相同的连接使用。所以对于你的问题,是的 - 你应该同步共享连接。
  • 不为每个线程打开一个新连接可能会使 mysql 服务器过载?
  • 您应该尝试各种方法,看看会发生什么。我建议不要过早优化并保持简单。有了具体的实现之后,你总是可以寻找瓶颈。
猜你喜欢
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多