标签:条件 tar sync except div add lock 练习 ons
五、Synchronized 与 JUC 具体实现对比
Synchronized | JUC | |
判断 | Object | Condition |
等待 | wait | await |
通知 | notify/notifyAll | signal/signalAll |
线程之间的通信: 判断 执行 通知
虚假唤醒问题:使用while进行条件判断
六、8锁练习
synchronized 修饰,锁的对象是方法的调用者,static 修饰,锁的对象是 Class 模板对象
七、不安全的集合
只要是并发环境,集合类都是不安全的(List、Set、Map),会出现 ConcurrentModificationException 并发修改异常
List | Map | Set | |
导致原因 | add | put | add |
解决方法一 | Collections.synchronizedList(new ArrayList<>()) | Collections.synchronizedMap(new HashMap<>()) | Collections.synchronizedSet(new HashSet<>()) |
解决方法二 | new CopyOnWriteArrayList<>() | new ConcurrentHashMap<>() | new CopyOnWriteArraySet() |
CopyOnWrite; 写入是复制 (思想 COW),add源码
1 public boolean add(E e) { 2 final ReentrantLock lock = this.lock; 3 lock.lock(); 4 try { 5 Object[] elements = getArray(); 6 int len = elements.length; 7 Object[] newElements = Arrays.copyOf(elements, len + 1); 8 newElements[len] = e; 9 setArray(newElements); 10 return true; 11 } finally { 12 lock.unlock(); 13 } 14 }
new CopyOnWriteArraySet()
标签:条件 tar sync except div add lock 练习 ons
原文地址:https://www.cnblogs.com/xbflovetj/p/12433424.html