package examples; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @ThreadSafe public class SyncLstExample { private Lock lock = new ReentrantLock(); private List lst; public SyncLstExample(List lst) { this.lst = lst; } public void add(T item) { lock.lock(); lst.add(item); lock.unlock(); } public void remove(int i) { lock.lock(); lst.remove(i); lock.unlock(); } } @ThreadSafe class FaultySyncLstExample { private Lock lock = new ReentrantLock(); private List lst; public FaultySyncLstExample(List lst) { this.lst = lst; } public void add(T item) { lock.lock(); lst.add(item); lock.unlock(); } public void remove(int i) { lst.remove(i); // $ Alert } }