番石榴供应商类包含备忘录供应商:
static class MemoizingSupplier<T> implements Supplier<T>, Serializable {
final Supplier<T> delegate;
transient volatile boolean initialized;
// "value" does not need to be volatile; visibility piggy-backs
// on volatile read of "initialized".
transient T value;
MemoizingSupplier(Supplier<T> delegate) {
this.delegate = delegate;
}
@Override public T get() {
// A 2-field variant of Double Checked Locking.
if (!initialized) {
synchronized (this) {
if (!initialized) {
T t = delegate.get();
value = t;
initialized = true;
return t;
}
}
}
return value;
}
@Override public String toString() {
return "Suppliers.memoize(" + delegate + ")";
}
private static final long serialVersionUID = 0;
}
有人能解释一下这句话是什么意思吗?
“价值”不需要是易变的;可见性依赖于对“已初始化”的易失性读取。
“初始化”字段上的挥发性如何影响“值”字段?根据这篇文章,我们可以得到“初始化”和“值”字段的不一致组合(例如。真空值)。我说错了吗?
这句话的基本意思是
如果该值未初始化,程序将执行这两条语句:
value = t; //normal write
initialized = true; //volatile write
如果值被初始化,程序将执行这两条语句:
if(!initialized) { ... } //volatile read
return value; //normal read
由于volatile语义,您在volatile write和volatile read之间有一个before关系,正常读入返回值
保证在value=t
处看到写入。这是因为正常写入在易失性写入之前,而正常读取在易失性读取之后。
例如,如果程序是这样编写的:
initialized = true;
value = t;
返回值
可能返回空值,因为此处的写入不会发生在作为内存屏障的易失性写入之前,因此它不再受益于易失性语义。
问题内容: 就像标题所说,我想使用Guava Collections获得线程安全的HashSet。 有空吗? 问题答案: 这是正确的答案,使用来自Guava的Sets类。无论如何,@ crhis的答案是好的。
问题内容: 刚刚发现了Guava库项目。 这些与GWT兼容吗? 问题答案: 从该页面的介绍性PDF中, 您可以在…上使用这些库。 在JDK 6上 在Android上, 我们认为。需要志愿者来帮助我们进行测试。 在Google App Engine上, 我们认为。需要志愿者来帮助我们进行测试。 在GWT上-参差不齐! 由于GWT的JDK库支持 可能参差不齐,也许是2/3,所以到目前为止,这些库中的东
问题内容: 我正在寻找在Maven存储库中的番石榴库。番石榴似乎正在向Google收藏库添加更多功能。 问题答案: 从r03开始,可以在中央Maven存储库中找到Guava版本。 您可以通过将以下依赖项添加到POM中来包括Guava: 注意:以上版本号在您阅读时可能已过时。 要了解最新的可用版本,您可以在这里查看 版本于2017年10月19日更新。
小公司 面着玩。互相刷kpi 面试官素质很差。 一面过。他们觉得我要的薪资高。因为我有退路。有保底。所以肯定要的高啊。 就让我二面。 jndi注入。什么情况下可以注入 蓝队的态势感知有了解吗,有什么工具 springboot漏洞的利用 redis主从复制的条件 想不起来了。反正很多跟java反序列化有关的。 sql怎么命令执行?最近挖的是sql server的 我就说了sql server的 他问
问题内容: 我想知道哪个更有效,为什么? 1) 要么 2) 问题答案: 我看不出您为什么要在此处使用builder的任何原因: 比在这种情况下制作一个更具可读性, 不会推断通用类型,并且在用作单行代码时必须自己指定类型, (来自docs) 在与另一个不可变集合调用时 做得很好( 尝试避免在安全的情况下实际复制数据 ), (从源) 调用以前创建的,同时避免为零元素和一元素集合创建任何列表(分别返回空
我想为番石榴设个坑(http://pitest.org/)进行突变熟练度测试,但我在尝试运行时出现以下错误。这是我得到的错误: 基本上,要么PIT没有检测到测试,要么测试在PIT中运行不正常,所有测试都失败了。我读了这篇文章:JUnit测试通过,但PIT说套件不是绿色的,我认为“您的代码库是否包含可变静态状态?(例如在单例中)”是问题所在,但我不知道如何修复它。如果测试套件有一些隐藏的顺序依赖关系