【发布时间】:2009-09-12 06:07:06
【问题描述】:
测试线程之间值可见性的最佳方法是什么?
class X {
private volatile Object ref;
public Object getRef() {
return ref;
}
public void setRef(Object newRef) {
this.ref = newRef;
}
}
X 类公开了对ref 对象的引用。如果并发线程读取和写入对象引用,则每个线程都必须查看设置的最新对象。 volatile 修饰符应该这样做。这里的实现是一个例子,它也可以是同步的或基于锁的实现。
现在我正在寻找一种方法来编写一个测试,当值的可见性未按规定(读取旧值)时通知我。
如果测试确实消耗了一些 cpu 周期也没关系。
【问题讨论】:
-
也许自省允许看到 volatile 限定符
-
目的是从外部观察线程可见性是否正确。这段代码可以使用同步,从这个角度来看是可以的。
标签: java multithreading unit-testing testing concurrency