做旅游攻略什么网站最好,正规的锦州网站建设,西安哪个公司可以做网站,网至普的营销型网站建设同步容器包括Vector和Hashtable#xff0c;还有一些由Collections.synchronizedXxx等工厂方法创建的 1、同步容器类的问题 同步容器类都是线程安全的#xff0c;但是有些时候还是要客户端加锁来保护复合操作 就比如vector的操作#xff0c;如果又两个方法一个获取vector集合… 同步容器包括Vector和Hashtable还有一些由Collections.synchronizedXxx等工厂方法创建的 1、同步容器类的问题 同步容器类都是线程安全的但是有些时候还是要客户端加锁来保护复合操作 就比如vector的操作如果又两个方法一个获取vector集合的最后一个元素一个删除最后一个元素 那么可能两个线程在同时操作的时候A线程首先正在获取最后一个元素get(lastElement),而在这个过程中如果B元素正在删除删除了最后一个last然后就可能导致A线程执行失败报错 那么如何避免这个问题呢 那就是吧获取最后一个位置的索引和获取数据复合操作加锁使其成为一个原子操作。同理获取索引和删除也是加锁把容器类作为锁的对象 2、隐藏迭代器 如下 package cn.xf.cp.ch05;import java.util.HashSet;
import java.util.Random;
import java.util.Set;public class HiddenIterator
{private final SetInteger set new HashSetInteger();//添加与删除操作public synchronized void add(Integer i) { set.add(i); }public synchronized void remove(Integer i) { set.remove(i); }public void addTenThings(){Random r new Random();for(int i 0; i 10; i){add(r.nextInt());}//注意这里可能会抛出异常因为这里使用了set但是没有加锁也就是应该加上HiddenIterator的对象锁才可以//而在输出日志的时候我们的set会调用toString方法而这个方法会对容器进行迭代//也就是在调用toString方法的时候可能set会被修改而迭代器在迭代的时候如果计数器被修改那么hasNext或next//将抛出ConcurrentModificationException异常System.out.println(DEBUG: added ten elements to set);}
} 转载于:https://www.cnblogs.com/cutter-point/p/5998491.html