1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.collections4.collection;
19
20 import java.io.Serializable;
21 import java.util.Collection;
22 import java.util.Iterator;
23 import java.util.Objects;
24 import java.util.function.Consumer;
25 import java.util.function.Predicate;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public class SynchronizedCollection<E> implements Collection<E>, Serializable {
47
48
49 private static final long serialVersionUID = 2412805092710877986L;
50
51
52
53
54
55
56
57
58
59
60 public static <T> SynchronizedCollection<T> synchronizedCollection(final Collection<T> coll) {
61 return new SynchronizedCollection<>(coll);
62 }
63
64
65 private final Collection<E> collection;
66
67
68 protected final Object lock;
69
70
71
72
73
74
75
76 protected SynchronizedCollection(final Collection<E> collection) {
77 this.collection = Objects.requireNonNull(collection, "collection");
78 this.lock = this;
79 }
80
81
82
83
84
85
86
87
88 protected SynchronizedCollection(final Collection<E> collection, final Object lock) {
89 this.collection = Objects.requireNonNull(collection, "collection");
90 this.lock = Objects.requireNonNull(lock, "lock");
91 }
92
93 @Override
94 public boolean add(final E object) {
95 synchronized (lock) {
96 return decorated().add(object);
97 }
98 }
99
100 @Override
101 public boolean addAll(final Collection<? extends E> coll) {
102 synchronized (lock) {
103 return decorated().addAll(coll);
104 }
105 }
106
107 @Override
108 public void clear() {
109 synchronized (lock) {
110 decorated().clear();
111 }
112 }
113
114 @Override
115 public boolean contains(final Object object) {
116 synchronized (lock) {
117 return decorated().contains(object);
118 }
119 }
120
121 @Override
122 public boolean containsAll(final Collection<?> coll) {
123 synchronized (lock) {
124 return decorated().containsAll(coll);
125 }
126 }
127
128
129
130
131
132
133 protected Collection<E> decorated() {
134 return collection;
135 }
136
137 @Override
138 public boolean equals(final Object object) {
139 synchronized (lock) {
140 if (object == this) {
141 return true;
142 }
143 return object == this || decorated().equals(object);
144 }
145 }
146
147
148
149
150 @Override
151 public void forEach(final Consumer<? super E> action) {
152 synchronized (lock) {
153 decorated().forEach(action);
154 }
155 }
156
157 @Override
158 public int hashCode() {
159 synchronized (lock) {
160 return decorated().hashCode();
161 }
162 }
163
164 @Override
165 public boolean isEmpty() {
166 synchronized (lock) {
167 return decorated().isEmpty();
168 }
169 }
170
171
172
173
174
175
176
177
178
179
180
181
182
183 @Override
184 public Iterator<E> iterator() {
185 return decorated().iterator();
186 }
187
188 @Override
189 public boolean remove(final Object object) {
190 synchronized (lock) {
191 return decorated().remove(object);
192 }
193 }
194
195 @Override
196 public boolean removeAll(final Collection<?> coll) {
197 synchronized (lock) {
198 return decorated().removeAll(coll);
199 }
200 }
201
202
203
204
205 @Override
206 public boolean removeIf(final Predicate<? super E> filter) {
207 synchronized (lock) {
208 return decorated().removeIf(filter);
209 }
210 }
211
212 @Override
213 public boolean retainAll(final Collection<?> coll) {
214 synchronized (lock) {
215 return decorated().retainAll(coll);
216 }
217 }
218
219 @Override
220 public int size() {
221 synchronized (lock) {
222 return decorated().size();
223 }
224 }
225
226 @Override
227 public Object[] toArray() {
228 synchronized (lock) {
229 return decorated().toArray();
230 }
231 }
232
233 @Override
234 public <T> T[] toArray(final T[] object) {
235 synchronized (lock) {
236 return decorated().toArray(object);
237 }
238 }
239
240 @Override
241 public String toString() {
242 synchronized (lock) {
243 return decorated().toString();
244 }
245 }
246 }