锁定老帖子 主题:java线程死锁与内存溢出
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-07
我说的打开关闭连接指的是就是从连接池中获取释放连接。也就是调用他这里的DDConnectionBroker.getConnection()和DDConnectionBroker.freeConnection()
|
|
返回顶楼 | |
发表时间:2009-01-07
连接池,最少有2年没写过了。。。。。用的都是项目封装好的。。。。。
|
|
返回顶楼 | |
发表时间:2009-01-07
新手贴,不过还有个jprofile这玩意的使用,貌似相当高级啊,我都没用过
|
|
返回顶楼 | |
发表时间:2009-01-08
Lucas Lee 写道 连接池虽然原理简单,但是要在多线程环境下工作良好且效率高、提供可以跟踪未关闭连接等特性就不那么简单了。
一般而言,还是不要自行实现连接池,用现成的DBCP就比你自己的强很多。 一般来说,每个AppServer都有自己内置的连接池,只需要配置一下就行。 同意,我想加入同步,是线程安全要做的,防止同时去取connection |
|
返回顶楼 | |
发表时间:2009-01-08
wangdi 写道
marlonyao 写道
zhangxi123 写道
如果我就要在这段代码的基础上改的话该如何修改呢??请大家给出代码示例(在Data的基础上),真心请教!谢谢!
总之,基础还太差,Java没有学习一个月就开始做项目了吧。
将getConnection()和connClose()加上synchronized就能够解决问题吗?Data中有这么多实例变量(connection, stat),居然还把它做单例,真是不可思议!一个线程关闭的连接可能是由另一个线程所打开的。真不知道你这样做是怎么控制事务的?如果这样修改,我觉得问题仍然没有解决,只是可能你暂时还没有发现而已。
我建议是:
还要更加努力的学习,切忌浮躁!
还是需要一个连接池的,可以节约资源,否则就疯狂的打开一个连接 关闭连接 |
|
返回顶楼 | |
发表时间:2009-01-08
最后修改:2009-01-08
前几天也发现一个由于线程死锁导致的后台程序阻塞,看了一下,应该是Hibernate有关Cache的一个BUG,在一种特殊情况下,Cache相关写日志会造成死锁。
看见源代码里有一个lock块不知道被谁注释掉了,当然没仔细研究是不是这个原因。 直接不输出Cache的日志了事。 得到的经验是不要一阻塞就光想到是内存溢出.... |
|
返回顶楼 | |
发表时间:2009-01-08
partech 写道 得到的经验是不要一阻塞就光想到是内存溢出....
阻塞,内存溢出,这是啥结论。。 |
|
返回顶楼 | |
发表时间:2009-01-08
jeffyan 写道 Lucas Lee 写道 连接池虽然原理简单,但是要在多线程环境下工作良好且效率高、提供可以跟踪未关闭连接等特性就不那么简单了。
一般而言,还是不要自行实现连接池,用现成的DBCP就比你自己的强很多。 一般来说,每个AppServer都有自己内置的连接池,只需要配置一下就行。 同意,我想加入同步,是线程安全要做的,防止同时去取connection 有这一说吗?你都同步了,WEB应用在并发情况下,你准备让它通过几个?不懂不要乱讲从整个应用来讲连接池的使用大部份分为两冲,一种是在应用服务器配置,在你的WEB应用是通过JNDI去获取,另一种是使用开源的第三方组件,如DBCP,c3p0之类的。自已写的连接池,我个人认为没有扎实功底,就算你实现了也难保性能上不出问题。 不知道楼上这位仁兄为什么会想到取连接的时候需要使用同步 |
|
返回顶楼 | |
发表时间:2009-01-08
marlonyao 写道
我建议是:
另外,觉得LZ所有的操作都在Data类里面做,感觉有些怪怪的,有没有哪位仁兄具体说明一下这样做的问题啊, 觉得这样做确实存在多线程的时候关闭出现错误的问题。 例外,LZ写得单例实在是跟我的认识有些差别,呵呵,建议还是按照LS的ls的ls。。。。给的那个单例例子来写吧。
|
|
返回顶楼 | |
发表时间:2009-01-08
最后修改:2009-01-08
设计上很有问题
|
|
返回顶楼 | |