2 lanshilei531589402 lanshilei531589402 于 2016.04.28 14:38 提问

effectiveJava学习疑惑

在学习effectiveJava时,看到关于使用构建器构建对象时,有这样一句话:因为构造过程被分到了几个调用之中,在构造过程总JavaBean可能处于不一致的状态(P10),不是很理解这句话中的对象不一致是什么意思。

2个回答

zjysource
zjysource   2016.04.28 14:41
已采纳

其实这个很好理解。
既然被分到了几个调用中,那么这几个调用的先后顺序的不同,是不是会造成被构造对象的状态不一致呢?
“几个调用的先后顺序的不同”最容易出现在多线程编程里,因为当你不去做空置时,你是无法决定每个线程的执行进度的,就会出现处在不同线程的调用的启动时间和完成时间是不可预知的。

zjysource
zjysource 回复dlut_lanshilei: 你说的是正确的。对Builder的构建,或者说,对builder的构造,肯定也会存在类似问题。所以,这对采用Builder模式的程序员提出了一个要求:Builder对象在最终build出产品之前,对Builder对象的各种赋值类方法的设计,是否要考虑进行同步控制。如果各种赋值方法互不影响,即设置的是没有相互重叠和干扰的值和应用,那么可以不作控制;反之,要么作同步控制,要么就要明确说明。举例来说,StringBuilder的各类append方法就是相互影响的,但StringBuilder又没有作同步控制,但是StringBuilder在自己的文档说明里做了明确的不作同步控制的声明。
一年多之前 回复
lanshilei531589402
lanshilei531589402 还有一个问题,使用Builder来构建对象的话,在构建Builder对象的时候是先new一个Builder对象,然后在调用Builder的set方法赋值,那这个Builder对象的构建过程不也同样存在不一致的问题吗
一年多之前 回复
lanshilei531589402
lanshilei531589402 理解了,谢谢!
一年多之前 回复
CSDNXIAON
CSDNXIAON   2016.04.28 14:42

学习计算机四年后的疑惑
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!