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

公司简介范文100字左右揭阳百度快照优化排名

公司简介范文100字左右,揭阳百度快照优化排名,免费制作广州网站,深圳网站开发专业文章目录 1、ArrayList集合线程安全问题分析2、解决方式一:Vector或synchronizedList( )3、解决方式二:CopyOnWriteArrayList 写时复制4、HashSet集合线程不安全的分析与解决5、HashMap集合线程不安全的分析与解决 1、ArrayList集合线程安全问题分析 对…

文章目录

  • 1、ArrayList集合线程安全问题分析
  • 2、解决方式一:Vector或synchronizedList( )
  • 3、解决方式二:CopyOnWriteArrayList 写时复制
  • 4、HashSet集合线程不安全的分析与解决
  • 5、HashMap集合线程不安全的分析与解决

1、ArrayList集合线程安全问题分析

对List集合非线程安全的Demo代码:

public class ArrayListDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();//多个线程同时写入List集合for (int i = 0; i < 10; i++) {new Thread(() -> {//加元素list.add(UUID.randomUUID().toString().substring(0,8));//遍历输出集合System.out.println(list);},String.valueOf(i)).start();}}
}

运行:

在这里插入图片描述

ConcurrentModificationException异常,是在多线程环境下,当一个线程正在遍历集合,而另一个线程对集合进行了修改操作时,就会抛出这个异常。以ArrayList为例,其add方法源码,未加synchronized关键字:

在这里插入图片描述

再点击报错详情,进入抛出异常的方法:

在这里插入图片描述

modCount即集合新增的次数,是实际修改次数,而expectedModCount是预期修改次数,它是ArrayList的一个内部类Itr的成员变量,调用iterator()获取迭代器时,内部创建Itr对象,此时,modCount会赋值给expectedModCount:

在这里插入图片描述

拿到迭代器对象,要遍历集合时,modCount已经赋值给expectedModCount,而此时其他线程继续add,modCount+1,modCount和expectedModCount就不相等了。

2、解决方式一:Vector或synchronizedList( )

List接口的另一个实现类Vector,其add方法加了关键字,使用它可解决线程安全问题,但很古老了,since1.2,很少用了。

在这里插入图片描述

List<String> list = new Vector<>();
//重复代码略

同样一种古老的解决方案,可以用Collections的synchronizedList方法,传入一个有线程安全问题的List,如ArrayList:

List<String> list = Collections.synchronizedList(new ArrayList<>());

3、解决方式二:CopyOnWriteArrayList 写时复制

List<String> list = new CopyOnWriteArrayList<>();

完整demo:

public class ArrayListDemo {public static void main(String[] args) {List<String> list = new CopyOnWriteArrayList<>();//多个线程同时写入List集合for (int i = 0; i < 10; i++) {new Thread(() -> {//加元素list.add(UUID.randomUUID().toString().substring(0,8));//遍历输出集合System.out.println(list);},String.valueOf(i)).start();}}
}

原理是写时复制技术,即:

  • 对这个List实现类的集合,可以多线程并发读
  • 往集合中写的时候,则只能独立写,先复制一份原来的集合,这个时候读还是读原来的,然后往新集合里面写入新的内容
  • 写完后新旧合并,再读时,就读这个合并后的集合

在这里插入图片描述
看下源码,再对照着理解写时复制:

在这里插入图片描述

4、HashSet集合线程不安全的分析与解决

public class HashSetDemo {public static void main(String[] args) {Set<String> set = new HashSet<>();for (int i = 0; i < 30; i++) {new Thread(() -> {//写入set.add(UUID.randomUUID().toString().substring(0,8));//读System.out.println(set);},String.valueOf(i)).start();}}
}

运行:

在这里插入图片描述

解决办法类比上面的List,使用CopyOnWriteArraySet

Set<String> set = new CopyOnWriteArraySet<>();

5、HashMap集合线程不安全的分析与解决

public class HashSetDemo {public static void main(String[] args) {Map<String,string> map = new HashMap<>();for (int i = 0; i < 30; i++) {String key = String.valueOf(i);new Thread(() -> {//写入map.put(key,UUID.randomUUID().toString().substring(0,8));//读System.out.println(map);},String.valueOf(i)).start();}}
}

在这里插入图片描述
解决办法类比List,用ConcurrentHashMap

Map<String,String> map = new ConcurrentHashMap<>();
http://www.yidumall.com/news/83948.html

相关文章:

  • 做网站最专业的公司有哪些中国万网域名查询
  • 企业网站产品分类多怎么做seoseo在线推广
  • 企业网站建设 制作百度搜索关键词优化
  • 北京网站sem、seo衡阳网站优化公司
  • 网站编辑做图片用什么不同企业全网推广公司
  • 做性视频大全在线观看网站杭州seo论坛
  • 手机网站一年费用吗推广普通话心得体会
  • 哪个网站可以做条形码seo免费优化
  • php网站开发实例教程书搜索引擎排行榜前十名
  • 休闲网站建设深圳网络营销外包公司推荐
  • 网站模板制作步骤河南最近的热搜事件
  • 济南汽车网站设计外贸订单一般在哪个平台接?
  • 红河个旧网站建设百度竞价排名软件
  • 宁波网站建设h5营销网站有哪些
  • 来个网站2021能用的seo博客
  • 用微魔方做的网站一定要加公司关键词排名优化
  • 济南正规网站建设公司网络广告营销案例分析
  • 河北软件开发网站建设查询百度关键词排名
  • 网站建设风险是什么意思南宁整合推广公司
  • 青浦网站招营业员做一休一实时热搜
  • 百度 门户网站福州seo优化
  • 网站搭建素材群关键词排名seo优化
  • 北京高端网站定制公司哪家好seo优化常识
  • 哪家公司建站的最近实时热点事件
  • 网站模板组件宁波网络推广外包
  • 廊坊营销型网站建设百度搜索排名怎么收费
  • 厦门网页建站申请比较好百度下载安装
  • 外国人做数学视频网站市场营销渠道
  • 1网站建设公司网站seo设置是什么
  • 十堰外贸网站建设全国疫情一览表