Chapter 2: Protect Your Shared Mutable Collection
← Protect Your Collections
Use Concurrent Collections →
Use Synchronized Collections
/** thread-safe */
class Crew {
/** guarded by 'members' */
private final List<String> members = new ArrayList<>();
void add(String name) {
synchronized (this.members) {
if (!this.members.contains(name)) {
this.members.add(name);
}
}
}
int size() {
synchronized (this.members) {
return this.members.size();
}
}
}
- requires a lot of code, lots of things to get wrong if not being careful
/** thread-safe */
class Crew {
/** guarded by 'members' */
private final List<String> members = Collections.synchronizedList(new ArrayList<>());
void add(String name) {
synchronized (this.members) {
if (!this.members.contains(name)) {
this.members.add(name);
}
}
}
int size() {
return this.members.size();
}
}
- still synchronized required for the two-step add, but can simplify the size calculation