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

石家庄百成网络烟台seo

石家庄百成网络,烟台seo,陕西网站建设技术方案,建设银行对公打不开网站1. JDK集合类 对于JDK的集合类&#xff0c;forEach方法其实并不能完全避免并发修改异常。 forEach本质上还是一个循环遍历&#xff0c;如果在循环体内直接对集合进行修改&#xff0c;仍然会产生ConcurrentModificationException。 例如&#xff1a; List<String> lis…

1. JDK集合类

对于JDK的集合类,forEach方法其实并不能完全避免并发修改异常。

forEach本质上还是一个循环遍历,如果在循环体内直接对集合进行修改,仍然会产生ConcurrentModificationException。

例如:

List<String> list = new ArrayList<>();list.add("a");
list.add("b");list.forEach(item -> {if("a".equals(item)){list.remove(item); // 会出错}
});

这段代码在forEach中直接修改了list,仍会抛出并发修改异常。

forEach之所以被认为能够避免并发修改异常,主要有两个原因:

  1. 使用外部变量暂存修改,forEach只读不改

  2. 使用严格的函数式编程规范,不修改外部状态

但实际上,如果在forEach中直接修改集合,问题仍然存在。

相比forEach,使用普通for循环甚至更好,因为可以在修改前用实际大小预先拷贝一次集合。

所以forEach本质上不能避免并发修改异常,需要通过保存修改至外部变量等方式进行规避。

更好的实践是:

  1. 在修改前拷贝一次集合防止影响

  2. 使用stream流水线处理,避免状态共享

  3. 外部保存修改,forEach只读不改

2. Redisson

对于Redisson的RMap,其forEach方法可以避免并发修改异常。

RMap的forEach方法使用了乐观锁的机制,可以确保并发修改时的线程安全。

简单来说,它的实现原理是:

  1. 在forEach遍历时,会获取一个乐观锁

  2. 如果在遍历过程中,有其他线程修改了RMap,这会导致锁失效

  3. 一旦锁失效,forEach会自动重新traverse,重新获取新的锁

  4. 这样可以保证遍历过程中任何修改都不会导致并发异常

例如:

RMap<String, Integer> map = redisson.getMap("test");map.forEach((k, v) -> {// 在foreach时删除或修改mapmap.remove(k); 
}); 

以上代码是安全的,不会产生并发修改异常。

所以RMap的forEach方法通过乐观锁实现了对并发修改的安全遍历,我们可以在forEach里面改变RMap而不用担心线程安全问题。

这是与JDK集合不同的一点,对于Redis数据结构的遍历,Redisson提供了更好的并发控制。

除了RMap,Redisson还在其他数据结构提供了更优秀的并发控制机制:

  1. RLock - 红锁,基于Redis的分布式锁,确保线程安全
  2. RReadWriteLock - 读写锁,实现了自动扩展的锁
  3. RSemaphore - 信号量,基于Redis的语义
  4. RCountDownLatch - 分布式闭锁
  5. RSet - 并发Set,基于Redis的Set增强
  6. RQueue - 阻塞队列,可以监听元素事件
  7. RBlockingQueue - 带超时的阻塞队列
  8. RBlockingFairQueue - 公平阻塞队列
  9. RTopic - 发布订阅,支持集群
  10. RBatch - 支持异步批量命令

Redisson扩展了很多JDK并发工具类和集合接口,基于Redis提供了分布式下的强一致性语义实现。

所以在分布式环境使用Redisson,可以简化很多并发与同步的难点,比如分布式锁、闭锁、信号量等。

http://www.tj-hxxt.cn/news/68653.html

相关文章:

  • 001做淘宝代码的网站网页seo搜索引擎优化
  • 郑州做网站的论坛手机百度2020
  • 品牌型网站建设公司微信营销软件排行榜
  • 做传感器交易的网站武汉大学人民医院光谷院区
  • 婺源做网站软文大全
  • wordpress document郑州seo推广优化
  • 赶集网2022年最新招聘关于seo如何优化
  • 阿里云建立wordpressseo知识是什么意思
  • bt搜索引擎下载北京优化seo
  • wordpress 豆瓣fm宁波seo推广服务电话
  • 阿里巴巴的网站怎么做的中文域名
  • 东莞做网站seo社交网络推广方法
  • 网站制作怎么把网站交付广州seo网站排名
  • 编程到底是学些什么百度推广账户优化方案
  • 定制网站开发多少钱seo网站关键词排名优化
  • 西安成品网站建设建站
  • 政府门户网站建设管理百度推广登录页面
  • 英文字体展示网站推荐他达拉非
  • 访问国外网站快的dns短视频seo代理
  • 制作灯笼的手工做法简单漂亮网站seo策划方案
  • 做网站月入过万的经验长沙seo咨询
  • 秦皇岛建委网站编写网站
  • 网站运营托管网络推广怎样做
  • 南京网站开发南京乐识专业网络营销有什么
  • 东营哪里有做网络推广的seo优化网
  • 中央纪委网站 举报 要这么做才有效销售crm客户管理系统
  • 网站后台程序开发教程域名收录批量查询
  • 重庆涪陵网站设计公司推荐肇庆网站推广排名
  • 烟台哪家公司可以做网站网站关键词挖掘
  • 动画设计专业大学排名seo课程总结