• 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

     
     
     
     
     
     
     
     
  • 相关阅读:
    关于maven的一些记录
    3des和tomcat部署
    java串口通讯
    mina自定义编解码
    Linux 下关闭防火墙设置
    查看本机IP
    linux修改localhost方法
    centos 6.5下使用中文输入法
    linux:can't save files
    ng-model取不到值的问题
  • 原文地址:https://www.cnblogs.com/east7/p/11665450.html
Copyright © 2020-2023  润新知