JCIP将Guarded对象定义为:
留守即可。只有持有特定锁才能访问受保护对象。受保护的对象包括封装在其中的对象 其他线程安全对象和已知由特定锁保护的已发布对象。
哪个可以作为核心Java内部这样一个对象的例子?
答案 0 :(得分:3)
我立即想到的是SynchronizedList
返回的Collections.synchronizedList()
实例所持有的列表。这是源代码的一部分:
static class SynchronizedList<E>
extends SynchronizedCollection<E>
implements List<E> {
final List<E> list;
public boolean equals(Object o) {
synchronized (mutex) {return list.equals(o);}
}
public int hashCode() {
synchronized (mutex) {return list.hashCode();}
}
public ListIterator<E> listIterator() {
return list.listIterator(); // Must be manually synched by user
}
list
对象不是线程安全的,但是由互斥锁保护。 listIterator()
返回的对象应该由相同的互斥锁(这是同步列表本身)手动保护。