我知道不可变对象始终具有相同的状态,即它们实际创建时的状态。它们的不变量由构造函数建立,并且由于它们的状态在构造后不会更改,因此这些不变量始终保持良好状态,这就是为什么可以在多线程环境中安全发布它们的原因。很好,但是由于我们生活在一个动态的世界中,程序的状态不断变化,如果通过不可变的对象构造程序的状态,那么这些对象会给我们带来什么好处?
您已经回答了“这些物品能给我们带来什么好处”。
关于问题的“动态”部分,如果您需要“更改”一个不变的对象,则可以从旧对象中创建一个新对象:
Immutable oldObj = new Immutable(...);
Immutable newObj = new Immutable(oldObj.property1, "a new value for property 2");
如果发现自己不断重复执行此操作,则可能需要使该对象可变,并添加能够在并发环境中使用该对象所需的相关胎面安全功能。
问题内容: 我想确保根据Java内存模型正确理解“有效不可变对象”的行为。 假设我们有一个可变的类,我们希望将其发布为有效的不可变的类: 我们执行以下操作: 问题是 :Java内存模型是否保证所有线程都必须具有? 根据 Java Concurrency In Practice, 这应该是正确的,但是如果我错了,请更正我。 3.5.3。安全出版惯用语 为了安全地发布对象,必须同时使对该对象的引用和该
我对JMeter还是一个新手,但我的问题是: 在将我的JMeter API测试计划检查到Jenkins之后,当Jenkins运行测试(通过.bat文件)并且断言失败(预期=200,但实际!=200),测试知道退出线程组并进入下一个线程。当测试完成运行时,Jenkins显示一个绿色状态表示成功,即使理论上测试失败。(也许是我处理错误太优雅了?)下面显示在Jenkins控制台窗口上,该窗口显示测试的绿
我想确保我正确理解根据Java内存模型的‘有效不可变对象’行为。 假设我们有一个可变类,我们希望将它发布为一个有效不可变的类: 我们执行以下操作: 问题是:Java内存模型是否保证所有线程必须具有? 根据Java并发实践,这应该是正确的,但如果我错了,请纠正我。 3.5.3.安全发布习语 要安全地发布对象,必须同时使对对象的引用和对象的状态对其他线程可见。通过以下方法可以安全地发布正确构造的对象:
问题内容: 这是Java Concurrency in Practice中的一句话 共享的只读对象包括不可变的和实际上不可变的对象。 不变对象和有效不变对象之间有什么区别? 问题答案: 不可扩展且其字段全部为自身且不可变的类的实例是不可变的。 由于其方法的详细信息而无法更改其字段的类的实例实际上是不可变的。例如: 的某些实例实际上是不可变的,而有些则不是。 另一个例子是零长度数组。它们实际上是不可
我得到这个错误,而试图改变阿波罗本地状态。 错误不变冲突:应为已解析的GraphQL文档。也许您需要将查询字符串包装在“gql”标记中?http://docs.apollostack.com/apollo-client/core.html#gql 初始状态 我的突变 我的解析器 我想改变按键的局部状态,功能是 生成数据功能如下 我是阿波罗客户的新手。我不明白我做错了什么。有人能帮我解决这个问题吗?
问题内容: 我正在努力使可变对象与不可变对象有关。使用可变对象会带来很多负面影响(例如,从方法中返回字符串数组),但是我很难理解它的负面影响。使用可变对象的最佳实践是什么?您是否应尽可能避免使用它们? 问题答案: 好吧,这有几个方面。 没有参考身份的可变对象会在奇数时间导致错误。例如,考虑使用基于值的方法的 : 当实例用作键时,实例在映射中“丢失”,因为实例和相等性基于可变值。这些值在映射之外更改