J2EE的层次关系及并发控制

03-08-30 bruce
Presentaion tier--Bussiness Delegation--VO--Business tier

在Presentaion tier, JSP/Servlet有各种方法控制并发问题。

在Business tier, SessionBean, EntityBean也有各种方法控制并发问题.

请问

大家在考虑Bussiness Delegation和VO时,有什么好的建议控制并发?

正在思考...

yyanghhong
2003-08-31 04:42
能不能先说一下下面这些是怎样做的.

在Presentaion tier, JSP/Servlet有各种方法控制并发问题。

在Business tier, SessionBean, EntityBean也有各种方法控制并发问题.

bruce
2003-08-31 09:14
在Presentaion tier, JSP/Servlet中, 我们可以用singlethread,也可以用synchronized整个函数或一小部分程序段,也可以通过Local variable或者把instance variable通过传参数的方式实现阶并发控制。

在Business tier, 我们有线程池的方式由EJB容器来解决,每一个SessionBean做为一个线程访问支持并发的EntityBean.

但是presentation tier 和 business tier之间的VO,也会涉及到并发问题,VO中的Setter和Getter,可能在多用户的时候出现同步问题。如何解决这样的问题呢?

我所能想到的办法如下:

1。把VO做成threadlocal的方式,使每个线程拥有一个VO, 但随着线程的增多,VO也增多,会影响效率。

2。把VO做成Singleton的模式,然后用synchrozide进行控制,这样可以解决上面问题1的问题,但多个线程共享一个VO, 当一个线程用Setter方法,其它的线程就不能使用Setter, 也会影响程序运行的效率。

另外,VO的弱点是:VO有可能不够Fresh,有脏读的可能。不知大家有什么好的想法?

抛块砖先。

yyanghhong
2003-08-31 12:16
好象有一种Double-checked locking pattern就是用来解决这个问题的

bruce
2003-08-31 23:16
DCL可以用来解决Singleton的线程同步问题,但我说的是VO.

猜你喜欢
4Go 1 2 3 4 下一页