当前位置: 首页 > news >正文

做网站应规避的风险网站开发项目怎么接

做网站应规避的风险,网站开发项目怎么接,长沙品质企业建站服务电话,网站后台管理系统地址一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时#xff0c;如果尝试对集合做一些修改操作#xff08;例如删除元素或新增#xff09;#xff0c;可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时如果尝试对集合做一些修改操作例如删除元素或新增可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args) {ListUser listnew ArrayList();for(int i0;i10;i){User user new User();user.setMsg(123i);user.setName(王总i);list.add(user);}list.forEach(item-{if(Objects.equals(item.getMsg(),1234)){User user new User();item.setName(456789);CglibUtil.copy(item,user);list.add(user);}});System.out.println(list);}执行之后会报 map的例子javajcItemMap.forEach((x,items)-{ListFinFreightItemR finFreightItemRList items.stream().filter(item - Objects.equals(item.getAmountFlag(), FinConstant.YesOrNo.YES)).collect(Collectors.toList());if(CollectionUtil.isEmpty(finFreightItemRList)){jcItemMap.remove(x);allItemMap.remove(x);}});二、java.util.ConcurrentModificationException异常产生的原因 ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改增添元素删除元素。。。时都会modCount.而foreach的背后实现原理其实就是Iterator等同于注释部分代码。在这里迭代ArrayList的Iterator中有一个变量expectedModCount,该变量会初始化和modCount相等但如果接下来对集合进行修改modCount改变就会造成expectedModCount !modCount,此时就会掏出异常java.util.ConcurrentModificationException异常。 过程如下图 三、异常的解决 1.单线程环境 上面我们已经了解了异常的发送原因接下我们说一下解决方案。 1.1我们可以使用iterator迭代器进行遍历 IteratorUser iterator list.iterator();while(iterator.hasNext()){User user iterator.next();if(Objects.equals(user.getMsg(),1234)){iterator.remove();}}System.out.println(list);细心的朋友会发现Itr中的也有一个remove方法实质也是调用了ArrayList中的remove但增加了expectedModCount modCount;保证了不会抛出java.util.ConcurrentModificationException异常。 但是这个办法的有两个弊端 1.只能进行remove操作add、clear等Itr中没有。 2.而且只适用单线程环境。 2、多线程环境 方法一迭代前加锁解决了多线程问题但还是不能进行迭代add、clear等操作。 public class Test12 {static ListString list new ArrayListString();public static void main(String[] args) {list.add(a);list.add(b);list.add(c);list.add(d);new Thread() {public void run() {IteratorString iterator list.iterator();synchronized (list) {while (iterator.hasNext()) {System.out.println(Thread.currentThread().getName() : iterator.next());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};}.start();new Thread() {public synchronized void run() {IteratorString iterator list.iterator();synchronized (list) {while (iterator.hasNext()) {String element iterator.next();if (Objects.equals(element,c)) {System.out.println(Thread.currentThread().getName() : element);iterator.remove();}}}};}.start();} }方法二采用CopyOnWriteArrayList解决了多线程问题同时可以add、clear等操作 public class Test12 {static ListString list new CopyOnWriteArrayList();public static void main(String[] args) throws InterruptedException {list.add(a);list.add(b);list.add(c);list.add(d);new Thread() {public void run() {IteratorString iterator list.iterator();synchronized (list) {while (iterator.hasNext()) {System.out.println(Thread.currentThread().getName() : iterator.next());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};}.start();new Thread() {public synchronized void run() {IteratorString iterator list.iterator();synchronized (list) {while (iterator.hasNext()) {String element iterator.next();if (Objects.equals(element,c)) {System.out.println(Thread.currentThread().getName() : element);list.remove(element);list.add(123456);}}}};}.start();Thread.sleep(5000);System.out.println(list);} }CopyOnWriteArrayList也是一个线程安全的ArrayList其实现原理在于每次add或remove等所有的操作都是重新创建一个新的数组再把引用指向新的数组。 对于HashMap的迭代删除是一样的
http://www.w-s-a.com/news/474830/

相关文章:

  • 做网站的骗术有什么好的网站设计思想的博客
  • 网站建设工作 方案企查查企业信息查询在线
  • 上海外贸建站商城定制软件安卓
  • 成都网站建设_创新互联wordpress 相邻文章
  • 电子商务网站制作步骤免费建网站知乎
  • 龙岩有什么招聘本地网站团购网站 方案
  • 服务器运行一段时间网站打不开注册公司名字核名查询系统
  • 企业网站改版的意义响应式网站建设新闻
  • 大连金州新区规划建设局网站金坛市建设局网站
  • 有哪些做排球比赛视频网站wordpress 教师工作坊
  • 深圳好点的网站建设公司互联网企业信息服务平台
  • 下载空间大的网站建设哈尔滨网站制作软件
  • 南城网站仿做无锡网站制作哪家价格便宜
  • c做的网站营销策划课程
  • 免费网站404免费进入重庆的公需科目在哪个网站做
  • 网站空间租用费用网站建设公司怎么宣传
  • 镇江网站建设优化案例分析dw2018网页制作步骤图文
  • 网站开发一个多少钱为什么前端都不用dw
  • 网站降权的原因北京中小企业网站建设公司
  • 个人域名能做网站吗wordpress
  • 手机网站设计只找亿企邦工业设计公司简介
  • 腾讯云主机做网站免费网站怎么做啊
  • 网站建设推广销售话术广州网页定制多少钱
  • 备案号是哪个网站项目管理pmp
  • 做网站需要哪些硬件软件网站视频链接怎么做的
  • 电子商务网站建设试题二wordpress主页显示浏览数
  • 网站快照没了广州企业电话大全
  • 网站项目开发收费标准网站开发app开发主营业务
  • 怎么到国外网站去接模具订单做互联网建设企业网站
  • 深圳品牌网站建设公司排名洪雅网站建设