스레드에 안전한 객체의 메서드를 조합하여 새로운 기능을 만들때 스레드 안전성이 깨질 수 있다.

public class UnsafeAtomic {
    private final AtomicInteger num = new AtomicInteger(0);
  
    public void setUpper(int n) {
        if (num.get() > n) {     // 원자적 연산 1
            num.set(n);          // 원자적 연산 2
        }
    }
}

AtomicInteger의 연산들은 스레드 안전하지만, 이들을 포함하여 만든 UnsafeAtomic.setUpper 는 원자적이지 않다.