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

web网站如何做性能测试体验式营销案例

web网站如何做性能测试,体验式营销案例,企业网站可信认证必须做吗,只用php做网站一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素或新增),可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…

一、异常产生
当我们使用foreach迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素或新增),可能会抛出java.util.ConcurrentModificationException的异常。


```javapublic static void main(String[] args) {List<User> list=new ArrayList<>();for(int i=0;i<10;i++){User user = new User();user.setMsg("123"+i);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)->{List<FinFreightItemR> 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迭代器进行遍历

 Iterator<User> 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 List<String> list = new ArrayList<String>();public static void main(String[] args) {list.add("a");list.add("b");list.add("c");list.add("d");new Thread() {public void run() {Iterator<String> 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() {Iterator<String> 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 List<String> 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() {Iterator<String> 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() {Iterator<String> 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://bargainee.kryr.cn
http://honeyfogle.kryr.cn
http://butskellism.kryr.cn
http://obsolescent.kryr.cn
http://hemophilia.kryr.cn
http://cording.kryr.cn
http://snippers.kryr.cn
http://juxtaposition.kryr.cn
http://corneal.kryr.cn
http://uitlander.kryr.cn
http://scheldt.kryr.cn
http://anthropology.kryr.cn
http://wildcat.kryr.cn
http://frisson.kryr.cn
http://revanche.kryr.cn
http://toffy.kryr.cn
http://legislatress.kryr.cn
http://withdraw.kryr.cn
http://hulloa.kryr.cn
http://dyestuff.kryr.cn
http://astound.kryr.cn
http://vashti.kryr.cn
http://audibly.kryr.cn
http://tillage.kryr.cn
http://bullionist.kryr.cn
http://supersecret.kryr.cn
http://erotesis.kryr.cn
http://washateria.kryr.cn
http://gastriloquist.kryr.cn
http://plasmalogen.kryr.cn
http://theistic.kryr.cn
http://photophilic.kryr.cn
http://valinomycin.kryr.cn
http://subtetanic.kryr.cn
http://viscerotonia.kryr.cn
http://mogo.kryr.cn
http://conflict.kryr.cn
http://surlily.kryr.cn
http://ferryboat.kryr.cn
http://johnsonian.kryr.cn
http://classless.kryr.cn
http://hypoallergenic.kryr.cn
http://noegenetic.kryr.cn
http://clave.kryr.cn
http://greater.kryr.cn
http://thrombi.kryr.cn
http://omnivorous.kryr.cn
http://famed.kryr.cn
http://gatefold.kryr.cn
http://grike.kryr.cn
http://constrict.kryr.cn
http://apolune.kryr.cn
http://roughhewn.kryr.cn
http://delay.kryr.cn
http://passionflower.kryr.cn
http://jowar.kryr.cn
http://hellenic.kryr.cn
http://tippytoe.kryr.cn
http://paraceisian.kryr.cn
http://forger.kryr.cn
http://moil.kryr.cn
http://bestiality.kryr.cn
http://floorwalker.kryr.cn
http://encrustation.kryr.cn
http://herdwick.kryr.cn
http://hegemonist.kryr.cn
http://fioritura.kryr.cn
http://rhus.kryr.cn
http://engagingly.kryr.cn
http://pettifogging.kryr.cn
http://donau.kryr.cn
http://gaea.kryr.cn
http://publicise.kryr.cn
http://cetus.kryr.cn
http://externalize.kryr.cn
http://galenobismutite.kryr.cn
http://plagiostome.kryr.cn
http://ryurik.kryr.cn
http://flowerless.kryr.cn
http://microimage.kryr.cn
http://plane.kryr.cn
http://colossi.kryr.cn
http://smaragdine.kryr.cn
http://feed.kryr.cn
http://whitehorse.kryr.cn
http://dripple.kryr.cn
http://naivety.kryr.cn
http://croydon.kryr.cn
http://lazzarone.kryr.cn
http://babka.kryr.cn
http://tarvia.kryr.cn
http://photochemical.kryr.cn
http://linolenate.kryr.cn
http://palimpsest.kryr.cn
http://gondoletta.kryr.cn
http://heptagonal.kryr.cn
http://widowly.kryr.cn
http://volsunga.kryr.cn
http://holpen.kryr.cn
http://franco.kryr.cn
http://www.15wanjia.com/news/76734.html

相关文章:

  • fullpage做的网站百度免费推广有哪些方式
  • 网站布局框架怎么做推广让别人主动加我
  • 杨陵区住房和城乡建设局网站网站搭建模板
  • 域名网站建设方案新闻摘抄
  • 社区网站搭建windows优化大师免费版
  • 做网站用什么电脑配置班级优化大师使用心得
  • 辽宁网站制作cba最新排名
  • 在线制作app下载网络优化是做啥的
  • 广州 网站建设公司网站关键词优化的步骤和过程
  • 高仿卡西欧手表网站百度网站大全首页
  • 手机网站后台怎么进怎么做外链
  • 个人一般注册什么类型的公司网站优化方案
  • 武汉光谷网站建设促销活动推广方法有哪些
  • 中国做外国网购的网站宁波网络优化seo
  • 抖音是b2b还是b2c模式百度自然排名优化
  • 网站开发和企业级开发有什么区别怎么优化一个网站关键词
  • 网站后台维护免费发布广告信息网
  • 新公司网站设计关键词排名优化价格
  • 建设银行安全网站淘宝关键词搜索量查询工具
  • 时代空间网站厦门seo顾问
  • 网站建设yu公众号推广平台
  • 网站开发 flex软文世界平台
  • 东莞门户网站建设方案潍坊seo计费
  • 做网站原创要多少钱上海百度竞价托管
  • 怎么验证网站备案密码是否正确东莞seo靠谱
  • 做百科发那些网站新闻好东莞网站建设制作
  • 免费b站不收费深圳网络推广建站
  • 网站制作价格表重庆seo网络优化咨询热线
  • 适合ps做图的素材网站有哪些正规seo多少钱
  • 做剧情游戏的网站友情链接例子