关于多线程同时使用同一个connection创建的多个对象的问题

StateGrid 2008-08-04 09:21:28
举个例子, 线程1创建了connection,然后通过connection创建了statement1和statement2 ,以及statement3 。 然后线程1使用statement1 , 线程2使用statement2 , 线程3使用statement3 ,3个线程共同运行 ,请问可以这样使用吗?

我正在编写一个jdbc驱动, 想知道由同一个connection创建的多个JDBC对象能够由多个线程同时使用吗(每个线程使用一个)?

JDBC规范是否要求必须支持这种使用?还是只要求同一connection创建的所有对象在某一时刻必须只能由一个线程访问?

目前的驱动是否支持多线程同时使用connection创建的对象?

如果规范不要求支持多线程共同使用connection , 并且驱动也不支持,那我也就选择不支持,毕竟这样做会极大的简单编码和提高效率
...全文
1021 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
柳波 2012-02-24
  • 打赏
  • 举报
回复
要保证其它线程使用的时候connection没有关闭。而且事务你怎么考虑的。
long69 2012-02-23
  • 打赏
  • 举报
回复
撑点人气
Long__yuan 2012-02-23
  • 打赏
  • 举报
回复
11111111111111111111111
brian314 2010-09-28
  • 打赏
  • 举报
回复
何时close掉connection才是合适的呢?一旦你关闭了,没运行完的线程就出问题了。
treetor 2008-09-27
  • 打赏
  • 举报
回复
顶哈
formajia8 2008-09-26
  • 打赏
  • 举报
回复
学习中,增加点人气
皖西木子 2008-09-25
  • 打赏
  • 举报
回复
回个先
converf 2008-09-25
  • 打赏
  • 举报
回复
受教了,
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bao110908 的回复:]
A 线程的事务有两条语句 S-1 和 S-2,B 线程的事务有一条语句 S-3。

A 线程进入执行语句 S-1,B 线程执行语句 S-2,几乎在同时执行完成,
由于 B 线程的任务完成了,需要使用 con.commit 进行提交,如果像你
所说的这种情况,S-3 在提交的同时会把 S-1 一起给提交了,这显示是
不正确的。
[/Quote]

汗,更正一下:

A 线程的事务有两条语句 S-1 和 S-2,B 线程的事务有一条语句 S-3。

A 线程进入执行语句 S-1,B 线程执行语句 S-3,几乎在同时执行完成,
由于 B 线程的任务完成了,需要使用 con.commit 进行提交,如果像你
所说的这种情况,S-3 在提交的同时会把 S-1 一起给提交了,这显
不正确的。
  • 打赏
  • 举报
回复
应该不会有这种情况发生。

事务处理是绑定在 Connection 上的,如果按照你说的这种,举个例子:

A 线程的事务有两条语句 S-1 和 S-2,B 线程的事务有一条语句 S-3。

A 线程进入执行语句 S-1,B 线程执行语句 S-2,几乎在同时执行完成,
由于 B 线程的任务完成了,需要使用 con.commit 进行提交,如果像你
所说的这种情况,S-3 在提交的同时会把 S-1 一起给提交了,这显示是
不正确的。

不知道你的 JDBC 驱动需要实现 JDBC 什么版本的规范。JDBC 所有的规
范,可以在下面这个链接找到:

http://java.sun.com/products/jdbc/download.html
StateGrid 2008-08-07
  • 打赏
  • 举报
回复
举个例子,一个connection创建了两个statement , 分别是statement-1和statement-2,然后线程1使用statement-1 ,线程2使用statement-2 , 两个线程同时运行。

编写驱动程序时需要支持这种情况吗?会有web应用这样写吗?
TinyJimmy 2008-08-07
  • 打赏
  • 举报
回复
对connection而言多个statement可以的, 只是statement不能并发提交, 得用锁控制.

事务控制和线程关系不大, 大事务由开发者控制, 如果不想相互影响就新建connection, 如果是单条语句, statement间不并发问题不大
废穴S猫 2008-08-07
  • 打赏
  • 举报
回复
lz的设计是有问题的。点一个,s1、s2、s3三个线程出现死锁了,connection怎么办?积累起来,你这个JDBC会崩溃的。
atealxt 2008-08-07
  • 打赏
  • 举报
回复
"一起给提交了",能具体说说么?
StateGrid 2008-08-06
  • 打赏
  • 举报
回复
我是说,JDBC驱动程序一定要支持多线程同时使用同一connecion创建的多个对象吗? 会有应用这样使用connection吗? 我记得web的J2EE应用都是一个线程获得一个连接,然后该线程单独使用该连接的
dryZeng 2008-08-06
  • 打赏
  • 举报
回复
可以支持多线程同时使用connection创建的对象,而且可以相互通信,但你必须创建一个公共的connection对象,三个线程都可以访问的对象.注意是对象.
StateGrid 2008-08-06
  • 打赏
  • 举报
回复
求教了,假如说一个connection创建了两个statement,线程1使用statament1发送查询获得结果集,线程2使用statement2发送查询获得结果集, 线程1和线程2允许同时执行吗?

允许和不允许的差别很大啊!

会有应用这样编写吗?
atealxt 2008-08-06
  • 打赏
  • 举报
回复
我觉得不可以。一个connecion同时只能有一个statement在执行。

不知道说的对不对,先回了有空做个测试:>
  • 打赏
  • 举报
回复
应该可以吧,写个测试试试呗。
StateGrid 2008-08-04
  • 打赏
  • 举报
回复
我的意思是说,假如一个connection创建了3个对象,那么能够由3个线程同时使用这三个对象吗?(每个线程使用一个)
加载更多回复(3)

81,095

社区成员

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

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