<<java并发编程实践>>读书笔记之类功能扩展
public class Test {public List<String> lists = Collections.synchronizedList(new ArrayList<String>()); //使用不同的锁策略,导致数据出现混乱public synchronized boolean listIfAbsent(String str) {boolean ifAbsent = lists.contains(str);if (!ifAbsent) {lists.add(str);}return ifAbsent;} //使用同一个锁策略,保证数据的正确性public boolean listIfAbsent1(String str) {synchronized (lists) {boolean ifAbsent = lists.contains(str);if (!ifAbsent) {lists.add(str);}return ifAbsent;}}public static void main(String[] args) {final Test t = new Test();new Thread() {public void run() {//该线程正在对list最修改if (!t.lists.contains("a")) {t.lists.add("a");}if (!t.lists.contains("b")) {t.lists.add("b");}// t.lists.set(0, "chenliang");System.out.println(t.lists);}}.start();t.listIfAbsent1("a");// t.listIfAbsent("b");}}