当前位置: 首页 > 编程笔记 >

Java中故障快速和故障安全之间的区别

咸育
2023-03-14
本文向大家介绍Java中故障快速和故障安全之间的区别,包括了Java中故障快速和故障安全之间的区别的使用技巧和注意事项,需要的朋友参考一下
序号 不及格 故障安全
1
例外
集合中的任何更改(例如在线程期间添加,删除和更新集合)都是迭代集合,然后使快速抛出并发修改异常失败。 
故障安全集合不会引发异常。 
2。
集合类型
ArrayList和hashmap集合是快速失败迭代器的示例 
CopyOnWrite和并发修改是故障安全迭代器的示例 
3。
性能与记忆
而是在实际集合上工作。因此,此迭代器不需要额外的内存和时间 
它正在处理集合的克隆,而不是实际的集合。时间和内存方面的开销
4。
修改项
 迭代器不允许在对集合进行迭代时对其进行修改。
故障保护迭代器允许在对集合进行迭代时对其进行修改。

故障保护示例

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //在映射上添加元素
      map.put("Dell", 1);
      map.put("IBM", 2);
      //从映射获取迭代器
      Iterator<String> it = map.keySet().iterator();
      while (it.hasNext()){
      String key = (String) it.next();
         System.out.println(key+" : "+map.get(key));
         map.put("Google", 3);
      }
   }
}

输出结果

IBM :2
Dell:1

故障保护示例

public class FailFastExample{
   public static void main(String[] args){
      List<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      //从列表中获取迭代器
      Iterator<Integer> it = list.iterator();
      while (it.hasNext()){
         Integer integer = (Integer) it.next();
         list.add(4);
      }
   }
}

输出结果

Exception in thread "main" java.util.ConcurrentModificationException
   at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
 类似资料:
  • 问题内容: Java中有两种迭代器:故障安全和故障快速。 这是什么意思,它们之间的区别是什么? 问题答案: 他们之间有什么区别… “故障安全”(在工程中)表示某些故障不会造成或只造成最小的损坏。严格地说,有 没有这样的事情 在Java中的故障安全迭代器。如果迭代器失败(通常为“失败”),则可能会发生损坏。 我怀疑您实际上是在说“弱一致性”迭代器。Javadoc说: “大多数并发Collection

  • 问题内容: 我得到这样的定义:顾名思义,快速失败的迭代器一旦意识到 自迭代开始以来 就已经改变了Collection的结构,它就会失败。 自迭代开始以来 是什么意思?是在 Iterator it = set.iterator()之后的 这行代码的意思吗? 问题答案: 首先,它们是 快速 故障的,而不是故障 安全的 。 合同规定,对某些类型的集合进行结构修改(即插入/删除)会使集合中的现有迭代器无效

  • YAML模式被定义为一组标签的组合,并包括用于解析非特定标签的机制。 YAML中的故障安全模式以这样的方式创建,即它可以与任何YAML文档一起使用。 它也被视为通用YAML文档的推荐架构。 类型 故障安全模式有两种类型:通用映射和通用序列。 通用映射 它代表一个关联容器。 这里,每个键在关联中是唯一的,并且映射到恰好一个值。 YAML对键定义没有任何限制。 下面给出了表示通用映射的示例 - JSO

  • Fuel 支援各式各样的配置,有时为了正常工作需要一些配置。以下列出了几个当你在你的机器上设置 Fuel 时可能跳出的情况。 当你的问题没有列在下面,或已列出但没有提供适当的解决方案时,请在议题追蹤(http://dev.fuelphp.com)回报此问题。 纯净安装下 500 错误 纯净安装下语法错误 能运作,但首页是 404。 Oil 无法连到 DB 但应用程序可以 ORM/DB 回传我的资料

  • Webpack 的配置比较复杂,很容出现错误,下面是一些通常的故障处理手段。 一般情况下,webpack 如果出问题,会打印一些简单的错误信息,比如模块没有找到。我们还可以通过参数 --display-error-details 来打印错误详情。 $ webpack --display-error-details Hash: a40fbc6d852c51fceadb Version: webpa

  • 初始设置 在创建并启动新的 Serene 应用程序之后,不能显示登录页,而当你打开浏览器控制台,却得到一条错误消息:找不到 Template.LoginPanel: 你可能使用了无效的解决方案名称,如 MyProject.Something (包含点’.’)。 当项目以这种方式命名时,模板系统将不能定位模板。 请不要在解决方案名称中使用点符号(’.’),如果必须使用点符号,可在创建解决方案之后再重