据本人有限的了解只知道B/S模式下,只有servlet和struts1存在线程安全性的问题,比如struts1中所使用的全局变量。但坦白的说我从来没有在开发过程中真正刻意去处理过或者遇到过因为线程造成的问题。所以希望遇到过的前辈们能分享一下你们在开发过程中遇到的实例。之所以突然想到这个问题是因为发现很多面试题中都很喜欢问一些集合类的区别(而他们大多数的区别是基于线程安全性区别的),但回想自己的开发过程,其实并没有去刻意注意这方面事情比如:我有的参与的项目用的是ArrayList,而有的参与项目用的是Vector。至少我感觉没有太多差别,即便用ArrayList也并没有引发什么线程安全造成的问题(或者是我们的架构人员已经通过其他手段处理了)

解决方案 »

  1.   

    碰到过有人在Web应用中用 HashMap 做缓存,没有做同步,然后并发量一大就错误百出。还碰到过有人拿static变量在两个函数调用之间传递参数,因为“不好修改原有接口的函数定义”以及“反正执行速度很快,发生混淆几率很低”
    不过总的来说Web应用出问题的比较少,真正多的还是玩数据库玩出死锁来了。
      

  2.   

    JAVA并发编程实践  可以去看看
    不过他里面多是以web应用做例子讲的 实际开发 也许是那种很底层的会用到很多 
      

  3.   

    最常见的是自以为聪明把 SimpleDateFormat 弄成静态的成员变量
      

  4.   

    比如一个service逻辑类,实际上是单例的,在内存中只保存一个对象,但这个类的全局变量就常会有线程安全性问题。所以这种类不要用全局变量。
      

  5.   

    举一个例子,这样一个servlet,他的功能是记录一个操作日志.this.userName="....";
    String sql = " insert into table (user_name,date) values ('"+this.userName"',sysdate)";这样的结果就是,操作日之中会出现张冠李戴,在实际工作中,我碰到股多次这样的问题,特别是新手不知道servlet在web容器中实际上只有一个实例,很容易出这个错误.
      

  6.   

    就是我http://www.ticmy.com/?p=146提到的数据库操作,亲身经历,排除这类问题搞了好几天