hz90 / java-base-knowledge

0 stars 0 forks source link

java 有状态 无状态 #25

Open hz90 opened 4 years ago

hz90 commented 4 years ago

无状态

无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。

无状态方法的好处之一,就是它在各种环境下,都可以安全的调用。衡量一个方法是否是有状态的,就看它是否改动了其它的东西,比如全局变量,比如实例的字段。format方法在运行过程中改动了SimpleDateFormat的calendar字段,所以,它是有状态的。

尽量编写无状态方法

Java对象的状态用属性来表示,有属性,也就是对象的变量,就表示是有状态的,有状态就是线程不安全的。

关于线程安全:

1) 常量始终是线程安全的,因为只存在读操作。

2)每次调用方法前都新建一个实例是线程安全的,因为不会访问共享的资源。

3)局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量和方法内变量。