多线程操作----找错误
找找下面错误
class ListHepler{public List<E> list = Collections.synchronizedList(new ArrayList<E>());public synchronized boolean putIfAbsent(E x){boolean absent = !list.contains(x);if(absent)list.add(x);return absent;}}
这里putIfAbsent方法和list使用的不是同一个锁,所以有隐患
class ListHepler{public List<E> list = Collections.synchronizedList(new ArrayList<E>());public boolean putIfAbset(E x){ synchronized (list) { boolean absent = !list.contains(x);if(absent)list.add(x);}return absent;}}
上面的方法都很傻逼
class ListHepler{public List<E> list = new ArrayList<E>();public synchronized boolean putIfAbset(E x){ boolean absent = !list.contains(x);if(absent)list.add(x);}return absent;}}