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

 
 
posted @   楼兰胡杨  阅读(3683)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示