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

南阳南阳新区网站建设汕头seo优化培训

南阳南阳新区网站建设,汕头seo优化培训,永倍达电商平台,住总第三开发建设有限公司网站1.经常使用什么并发容器,为什么?答:Vector、ConcurrentHashMap、HasTable一般软件开发中容器用的最多的就是HashMap、ArrayList,LinkedList ,等等但是在多线程开发中就不能乱用容器,如果使用了未加锁&#…

1.经常使用什么并发容器,为什么?

答:Vector、ConcurrentHashMap、HasTable

一般软件开发中容器用的最多的就是HashMap、ArrayList,LinkedList ,等等

但是在多线程开发中就不能乱用容器,如果使用了未加锁(非同步)的的集合,你的数据就会非常的混乱。由此在多线程开发中需要使用的容器必须是加锁(同步)的容器。

2. 什么是Vector

Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,访问它比访问ArrayList慢很多( ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。ArrayList的缺点是每个元素之间不能有间隔。 )

3. ArrayList和Vector有什么不同之处?

Vector方法带上了synchronized关键字,是线程同步的

1. ArrayList添加方法源码

2. Vector添加源码(加锁了synchronized关键字)

4. 为什么HashTable是线程安全的?

因为HasTable的内部方法都被synchronized修饰了,所以是线程安全的。其他的都和HashMap一样

1. HashMap添加方法的源码

2. HashTable添加方法的源码

5.ConcurrentHashMap,讲一下他和HashTable的不同之处?

多线程环境可以使用Collections.synchronizedMap同步加锁的方式,还可以使用HashTable,但是同步的方式显然性能不达标,而ConurrentHashMap更适合高并发场景使用。

ConcurrentHashmap在JDK1.7和1.8的版本改动比较大,1.7使用Segment+HashEntry分段锁的方式实现,1.8则抛弃了Segment,改为使用CAS+synchronized+Node实现,同样也加入了红黑树,避免链表过长导致性能的问题。

1.7分段锁

从结构上说,1.7版本的ConcurrentHashMap采用分段锁机制,里面包含一个Segment数组,Segment继承与ReentrantLock,Segment则包含HashEntry的数组,HashEntry本身就是一个链表的结构,具有保存key、value的能力能指向下一个节点的指针。

实际上就是相当于每个Segment都是一个HashMap,默认的Segment长度是16,也就是支持16个线程的并发写,Segment之间相互不会受到影响。

put流程

其实发现整个流程和HashMap非常类似,只不过是先定位到具体的Segment,然后通过ReentrantLock去操作而已,后面的流程我就简化了,因为和HashMap基本上是一样的。

  1. 计算hash,定位到segment,segment如果是空就先初始化

  1. 使用ReentrantLock加锁,如果获取锁失败则尝试自旋,自旋超过次数就阻塞获取,保证一定获取锁成功

  1. 遍历HashEntry,就是和HashMap一样,数组中key和hash一样就直接替换,不存在就再插入链表,链表同样

get流程

get也很简单,key通过hash定位到segment,再遍历链表定位到具体的元素上,需要注意的是value是volatile的,所以get是不需要加锁的。

1.8CAS+synchronized

1.8抛弃分段锁,转为用CAS+synchronized来实现,同样HashEntry改为Node,也加入了红黑树的实现。主要还是看put的流程。

put流程

  1. 首先计算hash,遍历node数组,如果node是空的话,就通过CAS+自旋的方式初始化

  1. 如果当前数组位置是空则直接通过CAS自旋写入数据

  1. 如果hash==MOVED,说明需要扩容,执行扩容

  1. 如果都不满足,就使用synchronized写入数据,写入数据同样判断链表、红黑树,链表写入和HashMap的方式一样,key hash一样就覆盖,反之就尾插法,链表长度超过8就转换成红黑树

get查询

get很简单,通过key计算hash,如果key hash相同就返回,如果是红黑树按照红黑树获取,都不是就遍历链表获取。

6. Collections.synchronized * 是什么?

注意:* 号代表后面是还有内容的

此方法是干什么的呢,他完完全全的可以把List、Map、Set接口底下的集合变成线程安全的集合

Map<String, Object> synchronizedHashMap = Collections.synchronizedMap(new HashMap<String, Object>());

7. SynchronizedMap 和 ConcurrentHashMap 有什么区别?

SynchronizedMap 一次锁住整张表来保证线程安全,所以每次只能有一个线程来访为 map。

ConcurrentHashMap 使用分段锁来保证在多线程下的性能。

ConcurrentHashMap 中则是一次锁住一个桶。ConcurrentHashMap 默认将hash 表分为 16 个桶,诸如 get,put,remove 等常用操作只锁当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有 16 个写线程执行,并发性能的提升是显而易见的。

另外 ConcurrentHashMap 使用了一种不同的迭代方式。在这种迭代方式中,当iterator 被创建后集合再发生改变就不再是抛出ConcurrentModificationException,取而代之的是在改变时 new新的数据从而不影响原有的数据,iterator 完成后再将头指针替换为新的数据 ,这样 iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变。

8. CopyOnWriteArrayList 是什么?

CopyOnWriteArrayList 是一个并发容器。有很多人称它是线程安全的,我认为这句话不严谨,缺少一个前提条件,那就是非复合场景下操作它是线程安全的。

CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这个列表时,不会抛出 ConcurrentModificationException。在CopyOnWriteArrayList 中,写入将导致创建整个底层数组的副本,而源数组将保留在原地,使得复制的数组在被修改时,读取操作可以安全地执行。

9. CopyOnWriteArrayList 的使用场景?

合适读多写少的场景。

10. CopyOnWriteArrayList 的缺点?

由于写操作的时候,需要拷贝数组,会消耗内存,如果原数组的内容比较多的情况下,可能导致young gc 或者 full gc。

不能用于实时读的场景,像拷贝数组、新增元素都需要时间,所以调用一个 set 操作后,读取到数据可能还是旧的,虽然CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求。

由于实际使用中可能没法保证 CopyOnWriteArrayList 到底要放置多少数据,万一数据稍微有点多,每次 add/set 都要重新复制数组,这个代价实在太高昂了。在高性能的互联网应用中,这种操作分分钟引起故障。

11. CopyOnWriteArrayList 的设计思想?

  • 读写分离,读和写分开

  • 最终一致性

  • 使用另外开辟空间的思路,来解决并发冲突

12. 常用的并发工具类有哪些?

  • CountDownLatch

CountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他3个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

  • CyclicBarrier (回环栅栏)

CyclicBarrier它的作用就是会让所有线程都等待完成后才会继续下一步行动。

CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。

CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。

  • Semaphore (信号量)

Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量(允许自定义多少线程同时访问)。就这一点而言,单纯的synchronized 关键字是实现不了的。

http://www.ds6.com.cn/news/15203.html

相关文章:

  • 导购 网站模板打开免费百度啊
  • 重庆推广网站排名价格成都外贸seo
  • win8metro ui风格的wordpress安卓手机优化神器
  • 网站建设插入歌曲西安最新消息今天
  • 网站国内空间和国外空间上海百度推广电话
  • 南京 网站设计软广告经典案例
  • 建设一个属于自己网站系统优化大师免费版
  • 做网站推广员必备的条件竞价排名什么意思
  • 如何把自己做的网站挂网上大数据营销成功案例
  • 无锡市建设工程质监站网站怎么做自媒体
  • 上海做网站找谁互联网营销策划是做什么的
  • 南海建设工程交易中心网站石家庄百度seo
  • 怎么做网站的推广商丘seo外包
  • 帮别人做网站开什么内容的专票营销策划经典案例
  • 网站如何快速被百度收录网站推广计划书范文
  • 广州电子商城网站建设seo收录查询工具
  • 做智能网站系统口碑营销是什么
  • 电商网站后台管理系统百度seo关键词优化方案
  • 网站图片展示源码抚州seo排名
  • wordpress pdf阅读独立站seo外链平台
  • 兼职20网站开发公司网站策划宣传
  • 国外市场网站推广公司网络推广项目代理
  • 设计网站都有哪些360上网安全导航
  • 免费素材网站 可商用2345浏览器网站进入
  • 做网站的备案资料百度统计官网
  • 多个域名 一个网站重庆网站seo教程
  • 深圳建网站培训学校建设网站公司
  • 重庆潼南网站建设公司seo公司 引擎
  • 上海网站建设天锐科技济南网站优化公司
  • 宠物网站开发与实现专业网络推广公司排名