下面是代码是struts2的源码,是ValidationAwareSupport这类中的。位于xwork这包。
请问一下,为什么要用synchronized,这个只是读取,有没有改变值,为什么要用同步呢?    public synchronized boolean hasActionErrors() {
        return (actionErrors != null) && !actionErrors.isEmpty();
    }    public synchronized boolean hasActionMessages() {
        return (actionMessages != null) && !actionMessages.isEmpty();
    }    public synchronized boolean hasErrors() {
        return (hasActionErrors() || hasFieldErrors());
    }    public synchronized boolean hasFieldErrors() {
        return (fieldErrors != null) && !fieldErrors.isEmpty();
    }

解决方案 »

  1.   

    !actionErrors.isEmpty();
     !actionMessages.isEmpty();
     !fieldErrors.isEmpty();
    看看这个里面都在干什么?
      

  2.   

    http://www.blogjava.net/swingboat/archive/2007/05/08/115882.html
    楼主可以看看这个
      

  3.   

    哥哥些 。。别让我看这些东西了 好吧
    这些东西我自己知道找啊 你们给的东西我很好找 
    而且struts2的actionContext是:
    ActionContext is thread local which means that values stored in the ActionContext are unique per thread....
    谁能告诉我为什么吗? 直接点 谢谢各位了。
      

  4.   

       线程不光是保证数据的同步,也保证了方法的调用的单一性。。
        如果有很多人调用这个方法。。有可能会造成代码处理的混乱出现异常。
          比如它的底层处理ActionErrors要True就执行某个方法。。但你客户端传过来的有N个True..
          那底层怎么处理呢?你事先又没有将这些True排个序或采用单通道模式(即统一线程)
       所以如果你单纯看这一段是没有必要采用synchronized关键字的但它是一个框架
         框架给我们带来了方便。。但同时它也为了保证它的方法能够顺利执行采用一些降低效率的措施。。
    以上是本人理解,如果有不到或不足之处请指出。。O(∩_∩)O谢谢。。共同进步!