2

mutex = thisSun がsynchronized(mutex)の代わりに synchronized(this) を使用しなかったのはなぜですか?
私は彼らがしたことをすることの利益を見ることができませんでしたか? 何か不足していますか?

static class SynchronizedCollection<E> implements Collection<E>, Serializable {
        private static final long serialVersionUID = 3053995032091335093L;

        final Collection<E> c;  // Backing Collection
        final Object mutex;     // Object on which to synchronize

        SynchronizedCollection(Collection<E> c) {
            if (c==null)
                throw new NullPointerException();
            this.c = c;
            mutex = this;
        }
        SynchronizedCollection(Collection<E> c, Object mutex) {
            this.c = c;
            this.mutex = mutex;
        }

        public int size() {
            synchronized (mutex) {return c.size();}
        }
        public boolean isEmpty() {
            synchronized (mutex) {return c.isEmpty();}
        }
4

4 に答える 4

1

これにより、コレクションのクライアントは、2 番目のコンストラクターを介して、1 つのミューテックスで複数のコレクションを同期できます。

于 2013-10-12T09:13:37.820 に答える
0

たとえばCollections.synchronizedMap(map).values()、これはミューテックスでCollection同期する必要があります。他のオブジェクトで同期mapを必要とするユーティリティは他にもたくさんあります。Collection

于 2013-10-12T16:31:37.547 に答える