该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-14
archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 对于DAO,只要没有成员变量(即可能被多个线程共享的变量),在Web应用中它就是线程安全的。 DAO单例不单例,跟用ThreadLocal没什么关系。先把基本概念搞清楚,别硬往上靠。 以前没用ThreadLocal时,大家都别写Web应用了? |
|
返回顶楼 | |
发表时间:2009-11-14
最后修改:2009-11-14
topxiaoke 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 我也不太赞成 mikewang 说的 引用至http://www.iteye.com/topic/481167#1191322 至于为什么要用ThreaLocal,通常是解决在分层设计中, 对于 ra 的处理通常比较棘手, 具体表现在跨层操作时候的参数传递上。 如果只是为了解决跨层的参数传递而使是用ThreadLocal,违反了ThreadLocal设计的实际用意,如果不考虑多线程,完全可以用一个全局变量在各层中传递参数。 这明显抬扛了,谁说不考虑并发了?你真要反驳,请提出个不必把Connection或session通过参数传递到DAO的各个方法,而且又能线程安全的办法。 你根本就没有理解ThreadLocal Pattern |
|
返回顶楼 | |
发表时间:2009-11-14
pipilu 写道 topxiaoke 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 我也不太赞成 mikewang 说的 引用至http://www.iteye.com/topic/481167#1191322 至于为什么要用ThreaLocal,通常是解决在分层设计中, 对于 ra 的处理通常比较棘手, 具体表现在跨层操作时候的参数传递上。 如果只是为了解决跨层的参数传递而使是用ThreadLocal,违反了ThreadLocal设计的实际用意,如果不考虑多线程,完全可以用一个全局变量在各层中传递参数。 这明显抬扛了,谁说不考虑并发了?你真要反驳,请提出个不必把Connection或session通过参数传递到DAO的各个方法,而且又能线程安全的办法。 你根本就没有理解ThreadLocal Pattern 他不是说了吗?用全局变量传递啊, 真想看看这个用全局变量传递connection的应用跑起来是什么样的。。 |
|
返回顶楼 | |
发表时间:2009-11-15
xieke 写道 pipilu 写道 topxiaoke 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 我也不太赞成 mikewang 说的 引用至http://www.iteye.com/topic/481167#1191322 至于为什么要用ThreaLocal,通常是解决在分层设计中, 对于 ra 的处理通常比较棘手, 具体表现在跨层操作时候的参数传递上。 如果只是为了解决跨层的参数传递而使是用ThreadLocal,违反了ThreadLocal设计的实际用意,如果不考虑多线程,完全可以用一个全局变量在各层中传递参数。 这明显抬扛了,谁说不考虑并发了?你真要反驳,请提出个不必把Connection或session通过参数传递到DAO的各个方法,而且又能线程安全的办法。 你根本就没有理解ThreadLocal Pattern 他不是说了吗?用全局变量传递啊, 真想看看这个用全局变量传递connection的应用跑起来是什么样的。。 使用全局变量的connection和ThreadLocal的Connection有本质区别,一个是全局单例,一个是对线程单例。全局单例在并发上就彻底乱套了。 BTW:这个贴不应该是隐藏贴,大家的讨论很有代表性。 |
|
返回顶楼 | |
发表时间:2009-11-15
pipilu 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 对于DAO,只要没有成员变量(即可能被多个线程共享的变量),在Web应用中它就是线程安全的。 DAO单例不单例,跟用ThreadLocal没什么关系。先把基本概念搞清楚,别硬往上靠。 以前没用ThreadLocal时,大家都别写Web应用了? 这位仁兄的这个说法我非常赞成,只要我们不使用成员变量,就可以不用考虑线程安全问题。不使用ThreadLocal,我们的DAO也可以是单例的。 |
|
返回顶楼 | |
发表时间:2009-11-15
多线程共享一个单利的dao,如上楼主所说,就ok,否则那就是现成安全的,就把dao当做一个工具得了,不要再往dao里塞那么多特殊化的东西,自找麻烦,
|
|
返回顶楼 | |
发表时间:2009-11-15
谢谢LZ,看完贴子,收获不少,ThreadLocal跟DAO用不用单例没什么关系,ThreadLocal是用来解决同一个线程中不同方法间connection传递的问题,而又可以保证该connection对别的线程不可见,Spring大概就是借助了这个来实现声明式事务的吧
|
|
返回顶楼 | |
发表时间:2009-11-16
topxiaoke 写道 pipilu 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 对于DAO,只要没有成员变量(即可能被多个线程共享的变量),在Web应用中它就是线程安全的。 DAO单例不单例,跟用ThreadLocal没什么关系。先把基本概念搞清楚,别硬往上靠。 以前没用ThreadLocal时,大家都别写Web应用了? 这位仁兄的这个说法我非常赞成,只要我们不使用成员变量,就可以不用考虑线程安全问题。不使用ThreadLocal,我们的DAO也可以是单例的。 不实用成员变量?那这个DAO功能肯定很弱吧? |
|
返回顶楼 | |
发表时间:2009-11-16
linliangyi2007 写道 xieke 写道 pipilu 写道 topxiaoke 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 我也不太赞成 mikewang 说的 引用至http://www.iteye.com/topic/481167#1191322 至于为什么要用ThreaLocal,通常是解决在分层设计中, 对于 ra 的处理通常比较棘手, 具体表现在跨层操作时候的参数传递上。 如果只是为了解决跨层的参数传递而使是用ThreadLocal,违反了ThreadLocal设计的实际用意,如果不考虑多线程,完全可以用一个全局变量在各层中传递参数。 这明显抬扛了,谁说不考虑并发了?你真要反驳,请提出个不必把Connection或session通过参数传递到DAO的各个方法,而且又能线程安全的办法。 你根本就没有理解ThreadLocal Pattern 他不是说了吗?用全局变量传递啊, 真想看看这个用全局变量传递connection的应用跑起来是什么样的。。 使用全局变量的connection和ThreadLocal的Connection有本质区别,一个是全局单例,一个是对线程单例。全局单例在并发上就彻底乱套了。 BTW:这个贴不应该是隐藏贴,大家的讨论很有代表性。 顶 赞同linliangyi2007的见解。 |
|
返回顶楼 | |
发表时间:2009-11-16
topxiaoke 写道 pipilu 写道 archerfrank 写道 pipilu 写道 楼上为什么有人在说DAO单例不单例的事呢?跟那有关系么?
关于本帖的主题,大家可以看一下:http://www.iteye.com/topic/481167#1191322 这里面mikewang的解答 如果是单例,不同的线程可能拿到同一个DAO,不tl,就可能被其他线程关闭了。而现在大家的DAO基本都是单例的。 对于DAO,只要没有成员变量(即可能被多个线程共享的变量),在Web应用中它就是线程安全的。 DAO单例不单例,跟用ThreadLocal没什么关系。先把基本概念搞清楚,别硬往上靠。 以前没用ThreadLocal时,大家都别写Web应用了? 这位仁兄的这个说法我非常赞成,只要我们不使用成员变量,就可以不用考虑线程安全问题。不使用ThreadLocal,我们的DAO也可以是单例的。 没有成员变量,这样的DAO现在很少用了吧。 |
|
返回顶楼 | |