美文网首页
有状态对象和无状态对象

有状态对象和无状态对象

作者: 前度天下 | 来源:发表于2021-04-19 13:07 被阅读0次

1、线程安全
  要搞清楚有状态对象和无状态对象,首先需要弄清楚线程安全的问题。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,那么就是线程安全的。
  或者说,一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
  线程安全问题都是由全局变量及静态变量引起的。 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

2、关于线程安全
1) 常量始终是线程安全的,因为只存在读操作。
2) 每次调用方法前都新建一个实例是线程安全的,因为不会访问共享的资源(共享堆内存)。
3) 局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量和方法内变量。

3、有状态和无状态对象
  有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。其实就是有数据成员的对象。

无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象。不能保存数据,是不变类,是线程安全的。具体来说就是只有方法没有数据成员的对象,或者有数据成员但是数据成员是可读的对象。

4、代码示例

/**
 * 有状态bean,有state,user等属性,并且user有存偖功能,是可变的。
 */
public class StatefulBean {

    public int state;
    // 由于多线程环境下,user是引用对象,是非线程安全的
    public User user;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

/**
 * 无状态bean,不能存偖数据。因为没有任何属性,所以是不可变的。只有一系统的方法操作。
 */
public class StatelessBeanService {

    // 虽然有billDao属性,但billDao是没有状态信息的,是Stateless Bean.
    BillDao billDao;

    public BillDao getBillDao() {
        return billDao;
    }

    public void setBillDao(BillDao billDao) {
        this.billDao = billDao;
    }

    public List<User> findUser(String Id) {
        return null;
    }
}

原文链接:https://blog.csdn.net/eff666/article/details/52495393

相关文章

  • 无状态对象和有状态对象

    无状态对象 没有状态 只有只读属性,没有可写属性 有状态就是有数据存储功能。有状态对象(StatefulBean...

  • 无状态对象和有状态对象

    有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安...

  • 有状态对象和无状态对象

    1、线程安全要搞清楚有状态对象和无状态对象,首先需要弄清楚线程安全的问题。如果你的代码所在的进程中有多个线程在同时...

  • Java学习-2-对象和类

    对象和类 什么是对象?对象有状态和行为;状态指一朵花是红色的,紫色的,品种;行为有睡眠状态,呼吸等等。 什么是类呢...

  • Java(第二周)

    一、java对象和类 Java中的对象对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:...

  • Java中的一些基础概念(一)

    对象和类 1、对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有...

  • JAVA synchronized锁升级

    若对象为无锁状态,修改对象头中的锁状态为偏向锁,并在对象头中记录当前线程id; 若对象为偏向锁状态,检查对象头中的...

  • 状态模式

    状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态...

  • iOS设计模式之状态模式

    状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改...

  • Hibernate【缓存】知识要点

    对象状态 Hibernate中对象的状态: 临时/瞬时状态 持久化状态 游离状态 学习Hibernate的对象状态...

网友评论

      本文标题:有状态对象和无状态对象

      本文链接:https://www.haomeiwen.com/subject/uzsilltx.html