发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA
1 2 下一页 Go 2

ThreadLocal怎么用?用不好

         
2006-01-09 16:41
赞助商链接

hibernate里对session 的处理就是用的ThreadLocal.

本人在项目中有些想法也想用这个东西,但不知道怎么用合适

比如一个业务对象的pool,在一个操作中被多次用到,当然不想每次刷新最新数据,最好是本线程中刷新一次就好。初看是个用ThreadLocal地方。

但这个东东不好用,

首先只能放一个东东进去,取出来的时候又要转型。多个东西怎么放?
直接放一个map进去么?中途被误覆盖了怎么办,很难查。

还有界面是swing,有人说,swing调后台都是一个线程,真的?
也就是说用户所有的操作都是在一个线程里?

还有ThreadLocal在RMI里表现如何呢?

2006-01-10 14:46

你可以看看JForum的源码。

具体的我还没有完全搞明白 :(

2006-01-10 17:16

使用ThreadLocal又回到线程编程原始时代,Hibernate这样的基础框架迫于无奈可以用用,应用系统我个人认为不能用。

jsp/servlet本来就是让我们回避多线程编程的环境,现在倒好,被这些框架打着先进设计理念的旗帜又倒退了。唉。

2006-01-10 17:38

Web容器中有三个周期request/Httpsession/application
其中request是客户端发出的一个请求,这个request的载体就是一个线程,实际等同于一个线程的生命周期。

Request是封装在线程上面一个抽象概念。

而ThreadLocal则相当于多个线程的一个共享全局变量存储地,它里面保存的是和每个线程相关的状态。所以threadLocal是为线程服务的,和线程处于一个底层位置。

正因为Spring/Hibernate这些框架对于状态处理短处,所以才只能透过Web容器的request等状态封装,直接到底层操作与线程同一层次的threadLocal。

当一个线程或request结束时,threadlocal中的状态就没有了,所以threadLocal基本类似request.setAttribute作用,threadLocal中的对象状态的生命周期等同于request.

状态对象:数据库的替代者:
http://www.jdon.com/artichect/state.htm

2007-02-05 18:06

使用ThreadLocal可以大量减少参数的传递,可以使代码简洁,但是一定要明白,一个线程会绑定多个自己定义的局部对象,ThreadLocal是抽象在线程上的对象创建工厂,目前的Tomcat5使用了线程池,一个线程处理一个request,这样ThreadLocal对象可以抽象的绑定在request生命周期,不会存在线程危机,而且线程池也平衡了这些ThreadLocal对象的消耗,但是tomcat 6使用nio技术,一个线程可能会处理多个request,提高处理访问能力的情况下,ThreadLocal的使用将会出现问题,对象不再服务于一个request,所以ThreadLocal的长期使用需要注意!

2Go 1 2 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com