BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #16217同步于 2010/10/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【求助】servlet线程安全问题

neo861002
2010/10/31镜像同步6 回复
言简意赅的描述下,我的程序框架是这样的 servelt -> service -> DAO -> Database 现在的问题就是我不确定在多用户并发访问的情况下我的servlet是否是线程安全的?也就是说会不会出现用户得到的数据互相混乱的情况(这是相当糟糕的=_ =。。。)特来向坛子里的童鞋们请教下 大概的伪代码图如下: User (POJO对象) =============================== int userid Stirng username String password // getter and setter method UserDao (DAO数据访问对象,里面的方法用hibernate写的) =============================== add(User) delete(User) update(User) List find(int) { //......get from data base } UserService (往上封装的服务类,会存一个dao的实例对象) =============================== UserDao userDao = new UserDao(); ------------------------------- add(User) delete(User) update(User) find(int userid) { List list = userDao.find(userid) } UserServlet (servlet类,会存一个UserService的实例变量) ================================ UserService userService = new UserService(); -------------------------------- doPost(request,response) { String userid = request.getParameter("userid"); User user = userService.find(userid); response.getWriter().write(user.getUsername()); response.getWriter().close(); } 图解: 类名 =========== 实例变量 ----------- 方法 问题: servlet中打印出来的username在多线程下会不会出现混乱的情况?也就是我的userid发送请求回来的不是我对应的username,而是别人的? response.getWriter().write(user.getUsername()); 看了网上相关文章各种说同步问题,觉得应该没啥问题,可是还是不懂。。。请教啦~[ema13]
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
hotcode机器人#1 · 2010/10/31
需要考虑同步的前提是:有共享的资源 但是你这个servlet完全没有共享的东西,比如成员变量之类的。所以你这个例子不需要考虑同步问题 【 在 neo861002 的大作中提到: 】 : 言简意赅的描述下,我的程序框架是这样的 servelt -> service -> DAO -> Database : 现在的问题就是我不确定在多用户并发访问的情况下我的servlet是否是线程安全的?也就是说会不会出现用户得到的数据互相混乱的情况(这是相当糟糕的=_ =。。。)特来向坛子里的童鞋们请教下 : 大概的伪代码图如下: : ...................
ox机器人#2 · 2010/10/31
无状态对象都是线程安全的 【 在 neo861002 (哈欠神|ReMinD) 的大作中提到: 】 : 言简意赅的描述下,我的程序框架是这样的 servelt -> service -> DAO -> Database : 现在的问题就是我不确定在多用户并发访问的情况下我的servlet是否是线程安全的?也就是说会不会出现用户得到的数据互相混乱的情况(这是相当糟糕的=_ =。。。)特来向坛子里的童鞋们请教下 : 大概的伪代码图如下: : ...................
ox机器人#3 · 2010/10/31
re 楼主可以读下 JAVA并发编程实践 【 在 hotcode (木易) 的大作中提到: 】 : 需要考虑同步的前提是:有共享的资源 : 但是你这个servlet完全没有共享的东西,比如成员变量之类的。所以你这个例子不需要考虑同步问题
neo861002机器人#4 · 2010/10/31
恩 没错 糊涂了糊涂了 还是当时学的没理解透啊 多谢“热码”~ 【 在 hotcode 的大作中提到: 】 : 需要考虑同步的前提是:有共享的资源 : 但是你这个servlet完全没有共享的东西,比如成员变量之类的。所以你这个例子不需要考虑同步问题 : 【 在 neo861002 的大作中提到: 】 : ...................
neo861002机器人#5 · 2010/10/31
多谢版主推荐~ 【 在 ox 的大作中提到: 】 : re : 楼主可以读下 JAVA并发编程实践 : 【 在 hotcode (木易) 的大作中提到: 】 : ...................
wolf521机器人#6 · 2010/11/1
尽量不要在servlet里用实例变量 因为在有些容器里servlet是单实例运行的,实例变量是被所有线程共享的 可以考虑用ThreadLocal