@Immutable
public final class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
@ThreadSafe
public class Counter {
private AtomicInteger count = new AtomicInteger(0);
public int getCount() {
return count.get();
}
public void increment() {
count.incrementAndGet();
}
}
public class Printer {
private final Object lock = new Object();
@GuardedBy("lock")
public void print(String message) {
synchronized (lock) {
System.out.println(message);
}
}
}
@NotThreadSafe
public class UnsafeCounter {
private int count = 0;
public int getCount() {
return count;
}
public void increment() {
count++;
}
}