我正在阅读有效的java' - 当类具有多个可选构造参数时,它建议使用构建器模式。合理的是它有优势 -
'伸缩模式' - 它基本上为一个构造函数提供了需求模式,另一个构造函数需要+ 1个可选项,另一个构造函数具有'需要+ 2个可选'等等 - 作者认为,当可选参数失控时,这变得难以读取和写入
&#39;的Javabean&#39;模式 - 使用无参数构造函数,然后为每个参数运行一个setter - 这里的缺点是线程安全 - 因为对象经过多个方法 - 并且可能在构造时可访问,从而在远离代码的部分中导致意外行为< / p>
推荐的模式 - 构建器 - 使用&#39;静态&#39;具有可选参数的类中的内部类成员 - 客户构建&#39;构建器&#39;在&#39; java bean&#39;风格建构,然后调用班级&#39;构造函数,它基本上使用构建器成员来设置其字段
呼!
我的问题:鉴于构建器是静态成员,应用程序中的其他线程是否也可以访问并可能同时更改构建器属性?导致意外行为?
没有线程编程经验所以请原谅我这是一个愚蠢的问题
答案 0 :(得分:6)
静态成员字段(在所有类的所有实例之间共享内存)与静态内部类之间存在差异(无法查看或共享数据外层)。
Effective Java正在推广一种使用后一种方法的模式,它不会让您遇到任何线程安全问题。
如果由于某种原因,在程序中的两个线程上共享相同的Builder实例,那么是的,您遇到了线程安全问题。