我的servlet会创建一个静态的Vector 并往这个Vector里加东西,最后把这个Vector塞到application里保存
另外,servlet会起一个线程,从application里把这个Vector取出来,删一些东西,再把这个Vector塞回application里我知道Vector是不用加锁的,但是application不是线程安全的这里要怎么处理,在存取application的时候都用synchronized方法块括起来吗?求教高手们,好人一生平安

解决方案 »

  1.   

    1,从application里把这个Vector取出来,
    2,删一些东西,
    3,再把这个Vector塞回application里其中第3步不需要,不解释出现多线程同步的问题在于在1,2步时,可能出现多个线程同时进行添加或者修改,即线程1添加完1个对象之后,线程2又添加1个对象,然后,线程1又删除1个对象。这种情况。如果你非要进行同步,这样写
    synchronized(你的vector){
    vector操作
    }这样可以保证线程同步,因为全application共享同一个vector
      

  2.   


    刚才又画了个图 想了了一下,再把我的问题梳理一下:
    从服务器启动开始,内存中就存在了一个application
    本身servlet的调用也是一个线程,那么就有一个a线程负责给application里加东西
    我另外会起一个线程b线程负责从application里删东西
    那么这两个线程对application操作的地方都需要加上synchronized
    就能保证a线程操作的时候b线程等在外面
    而b线程操作的时候a线程等在外面。应该是这样的吧
      

  3.   

    貌似没有synchronized,因为Vector本身就是线程安全的,楼主考虑多了吧?
      

  4.   


    你好 我的两个线程并没有直接操作Vector 而是操作的ServletContext application(Vector 被装进application了)
    在两个线程分别对application分别进行setAttribute和getAttribute时,我想对他们的这种操作加上synchronized 应该是对的吧