模拟一个代理类P,这个类用来封装数据操作(无状态的代理类),客户端调用的时候,这个类以单态的形式存在于服务端.
当客户端A请求代理P,而另一客户端B也请求代理P去处理数据时( 同一时刻),那么作为服务端唯一的单态实例,它被两个不同的客户端A,B所调用时,会先被谁执行呢?A还是B,还是同时.会不会存在锁的问题,或者葬数据的问题.类似于EJB的session bean中的代理类,但俺不记得session bean的实例是不是在虚拟机上是唯一的.请各位帮忙给解释解释.

解决方案 »

  1.   

    建议搞清楚,会话bean的几种状态,有点区别的
    线程问题,同意楼上.一般都会使用到,ThreadLocal创建副本,应该没什么问题!!
      

  2.   

    如果线程要是同步的话我想不会出现死锁问题。
    再一个,A和B的先后大多数情况下取决于优先级的高低,但是还要看CPU是如何分配的。缓存对EJBHome的访问;使用门面模式,不暴露Entity Bean,用Session Bean封装Entity Bean;如果可以异步处理,则用MDB代替Session Bean;封装业务逻辑在轻量级JavaBean中;使用值对象等简单对象传递数据;不直接使用get/set方法操作Entity Bean。当然过度使用模式或者牵强套用模式也是不提倡的,总的原则就是减少网络流量,改进事务管理。以上个人观点。
      

  3.   

    楼主说的如果不是用rmi实现的话就是一个多线程问题,涉及到成员变量程序就会有同步问题,rmi的没有试过。ejb的session bean不是唯一的,我觉得和servlet的session的概念在一定程度上有一样的作用。个人观点仅供参考
      

  4.   

    A和B同时请求P代理,既然P是无状态的,就一定可以被多线程访问,所以A和B谁先访问P都无所谓,它们肯定都有自己的线程Thread A和Thread B,对于这两个线程来说,P就是可以共享的资源,它们可以同时使用P这个资源来完成各自的任务除非要临界资源,否则不需要改变单例模式,Spring和EJB 3.0都倾向于容器管理单例,因为到Session Bean这一层大多数应用都要求能被多线程访问,偶虽然只用过EJB2.0,主要对Spring熟,但相信J2ee技术发展下去的原理是相通的。
      

  5.   

    会开启两个线程,不说EJB,就说Servlet,也是单例的,多个客户访问,每个客户会开启自己的线程,具体哪个运行哪个中断,取决于CPU时间.
    单例的类的成员变量被线程所共享.如果有成员变量可能会发生并发的问题,可能要采取同步的机制.当然后面这些要看你程序怎么去设计.