Java 有状态和无状态对象的区别


无状态会话Bean 

  无状态就是对于一次操作,不能保存数据。无状态对象(Stateless Bean)是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。例如: 
public class A { public A() {} public String hello() { return "Hello 谁?"; } } public class Client { public Client() { A a = new A(); System.out.println(a.hello()); A b = new A(); System.out.println(b.hello()); } }

  在Client中生成了两个A的实例,不管是对象a还是b,它们是没有状态的。对于Client来说a和b是没有差别的(但a != b)。所以同一个无状态会话Bean的实例都是相同的,可以被不同的客户端重复使用。 

有状态会话Bean 

 
  也称为有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。
public class B { private String name; public B(String arg) { this.name = arg; } public String hello() { return "Hello" + this.name; } } public class Client { public Client() { B a = new B("中国"); System.out.println(a.hello()); B b = new B("世界"); System.out.println(b.hello()); } } 

  其实线程池的概念同数据连接池概念基本相同,都是为了提高系统性能而设计的。就像是饺子馆一样,饺子的做法可以有两种,一种是不管当前有没有客人,先将一些饺子下锅,等到客人就座后可以马上捞出来给客人吃。还有一种是客人来后才将饺子下锅。这个例子显然不是十分恰当,但它的确能言简意赅地说明问题。线程池的概念就像是饺子的第一种做法,先在线程池中初始化一些线程,具体初始化多少取决于配置,等到客户端(消费者)调用时直接拿来使用。它和饺子的区别还是很大的,要是饺子下锅后没有客人来吃可惨了。

 

Reference

 
 
 
 
 
 
 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM