JCIP书中定义的核心java中的受保护对象的示例

时间:2012-07-03 12:01:09

标签: java multithreading concurrency synchronization

JCIP将Guarded对象定义为:

  

留守即可。只有持有特定锁才能访问受保护对象。受保护的对象包括封装在其中的对象   其他线程安全对象和已知由特定锁保护的已发布对象。

哪个可以作为核心Java内部这样一个对象的例子?

1 个答案:

答案 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()返回的对象应该由相同的互斥锁(这是同步列表本身)手动保护。