+ -
当前位置:首页 → 问答吧 → 求教关于线程操作jsp的application的问题

求教关于线程操作jsp的application的问题

时间:2011-08-25

来源:互联网

我的servlet会创建一个静态的Vector 并往这个Vector里加东西,最后把这个Vector塞到application里保存
另外,servlet会起一个线程,从application里把这个Vector取出来,删一些东西,再把这个Vector塞回application里

我知道Vector是不用加锁的,但是application不是线程安全的

这里要怎么处理,在存取application的时候都用synchronized方法块括起来吗?

求教高手们,好人一生平安

作者: jcwmssj   发布时间: 2011-08-25

1,从application里把这个Vector取出来,
2,删一些东西,
3,再把这个Vector塞回application里

其中第3步不需要,不解释

出现多线程同步的问题在于在1,2步时,可能出现多个线程同时进行添加或者修改,即线程1添加完1个对象之后,线程2又添加1个对象,然后,线程1又删除1个对象。这种情况。

如果你非要进行同步,这样写
synchronized(你的vector){
vector操作
}

这样可以保证线程同步,因为全application共享同一个vector

作者: Fly_m   发布时间: 2011-08-25

引用 1 楼 fly_m 的回复:
1,从application里把这个Vector取出来,
2,删一些东西,
3,再把这个Vector塞回application里

其中第3步不需要,不解释

出现多线程同步的问题在于在1,2步时,可能出现多个线程同时进行添加或者修改,即线程1添加完1个对象之后,线程2又添加1个对象,然后,线程1又删除1个对象。这种情况。

如果你非要进行同步,这样写
synchronized(……


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

应该是这样的吧

作者: jcwmssj   发布时间: 2011-08-25

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

作者: heweiAndPippo   发布时间: 2011-08-25

引用 3 楼 heweiandpippo 的回复:
貌似没有synchronized,因为Vector本身就是线程安全的,楼主考虑多了吧?


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

作者: jcwmssj   发布时间: 2011-08-25

热门下载

更多