精华帖 (7) :: 良好帖 (4) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-15
最后修改:2011-03-15
你写的类StatefulBean并不是线程不安全的。什么叫线程安全?指的就是不同线程不存在同时访问一个变量,或一个函数的情形。什么样的变量能被多个线程访问呢?JAVA中,类中的静态变量,单例类的任何属性都可以被多个线程访问。所以线程安全与否必须和这些在一起谈才有意义吧?不然,你可以把任何普通类的对象说成是线程不安全的。
另外,不变的对象不代表是线程安全的。不允许重入的函数,如果两个线程同时访问,一个异步的指针移动程序必然崩溃。 有一些类的方法本来不用属性,却没有声明为static,主要是为了利用多态。所以工具类(纯静态方法),和这种类还是区别开来比较好。 |
|
返回顶楼 | |
发表时间:2011-03-15
piao_bo_yi 写道 你写的类StatefulBean并不是线程不安全的。什么叫线程安全?指的就是不同线程不存在同时访问一个变量,或一个函数的情形。什么样的变量能被多个线程访问呢?JAVA中,类中的静态变量,单例类的任何属性都可以被多个线程访问。所以线程安全与否必须和这些在一起谈才有意义吧?不然,你可以把任何普通类的对象说成是线程不安全的。
另外,不变的对象不代表是线程安全的。不允许重入的函数,如果两个线程同时访问,一个异步的指针移动程序必然崩溃。 可能你没有仔细看。:->我没说StatefulBean是线程安全的。强不变类就是代表线程安全的,因为不可变,可以看看不变模式中的强不变。 |
|
返回顶楼 | |
发表时间:2011-03-16
我对stateful session bean 一直有点疑惑,就是stateful保持的状态的生存周期是多久? 购物车的例子更让我迷惑。
就拿这个例子来说 ShoppingCartBean : List<Product> products addItem(); browse(); 我一次addItem,然后browse。这里有两次客服端request。我通过jndi拿到的ShoppingCartBean是否是同一个呢,也就是bean的状态products是request级别还是session级别? 引开来说stateful session bean针对的是一个线程还是用户的会话? |
|
返回顶楼 | |
发表时间:2011-03-16
最后修改:2011-03-16
beforezero 写道 我对stateful session bean 一直有点疑惑,就是stateful保持的状态的生存周期是多久? 购物车的例子更让我迷惑。
就拿这个例子来说 ShoppingCartBean : List<Product> products addItem(); browse(); 我一次addItem,然后browse。这里有两次客服端request。我通过jndi拿到的ShoppingCartBean是否是同一个呢,也就是bean的状态products是request级别还是session级别? 引开来说stateful session bean针对的是一个线程还是用户的会话? 其实我这篇文章,并不是主要介绍ejb的。 .你说了,就说说。 总体周期是从客户端调用create()到客户端调用remove(),当然会话也有超时,当客户端一段时间没有访问SFSB方法时,EJB容器会将其回收。 SFSB的状态是指其实例变量的值,EJB容器分配一个SFSB实例给客户端使用后将保持该实例只给该客户端使用。 其实,你可以将SFSB的状态理解成HTTP的Session状态。 关于有状态会话BEAN的生命周期: 1:不存在状态---(client调用create())(容器调用Class.newInstance(),setSessionContext(),ejbCreate())---> 进入方法就绪状态(此时可以为client服务) ---> 如果超时则容器将其销毁,回到不存在状态。 ---> 如果服务器要节省资源或遇到新事务开启,则释放资源,实例打回到不存在状态。 序列化实例字段。(容器调用ejbPassivate()挂起)---> 事务等结束,重新找会资源,反序列化实例字段。 建立一个新的BEAN实例(容器调用ejbActivate()激活---> 容器调用ejbRemove()或客户显示调用remove()也会将BEAN打回到不存在状态。 |
|
返回顶楼 | |
发表时间:2011-03-17
我认为lz讲得更模糊,而且有些概念混淆了
|
|
返回顶楼 | |
发表时间:2011-12-06
学习了,之前没有注意到这些问题,重新思考一下
|
|
返回顶楼 | |