多线程共享数据库连接是否存在线程安全问题

天之骄子呃 2016-12-04 09:37:08
(1)最近在做的项目里我将数据库连接设置为静态变量,并且多个线程对数据库的增删改查操作共用这一个连接,那这个连接在程序运行过程中是多个线程抢占式使用吗?如果是,是不是就没有线程安全问题了,因为同一时刻只有一个线程使用这个数据库连接操作数据库。不知道我这样理解对不对?
(2)其次,共享连接会不会造成程序效率降低而不如多个线程使用多个连接,但这样一来势必又会造成线程安全问题吧?
备注:数据库使用的是oracle的berkeley db
...全文
661 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
秃头桔 2016-12-05
  • 打赏
  • 举报
回复
线程池是个好东西,我们要学会使用
廉月程 2016-12-05
  • 打赏
  • 举报
回复
可以利用加锁 完成多线程编程 什么乐观锁 悲观锁什么的
bree06 2016-12-05
  • 打赏
  • 举报
回复
共享连接 必须认知事务间的影响. 比如一个用户在更新自己的个人信息, 更新成功但未提交, 同时另一个用户在添加博客信息, 并且添加失败且做了事务回滚, 此时前一个用户的更新将会被一起回滚. 如果一个人操作无所谓, 但是用户多了就会出现问题. 一般的共享连接是在同一个方法里, 如果有多次数据库操作, 比如先查询是否存在, 然后选择更新或者新增.此时可以使用一个连接. 建议使用连接池, 而不是设静态连接.
月明星稀灬 2016-12-05
  • 打赏
  • 举报
回复
连接的效率,跟你的数据库有关,一般有最大连接数,超过了或者快达到峰值了,效率自然会下降。
月明星稀灬 2016-12-05
  • 打赏
  • 举报
回复
多线 程连接,如果是Oracle的话,同时操作同一个表,可能导致锁表,如果是DB2,就不会。
天之骄子呃 2016-12-05
  • 打赏
  • 举报
回复
引用 1 楼 jackloss 的回复:
數據庫底層自己會做并發的,所以不用在應用層考慮數據庫并發問題吧
所以可以共享连接?目前是业务上需要将某一列值大的写入,所以感觉上需要事务来隔离一下
jackloss 2016-12-04
  • 打赏
  • 举报
回复
數據庫底層自己會做并發的,所以不用在應用層考慮數據庫并發問題吧

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧