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

铜梁旅游网站建设管理自媒体人专用网站

铜梁旅游网站建设管理,自媒体人专用网站,帮管客crm,团队网站建设当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中,即使失败是发生在执行某个操作的过程中间。对于受检的异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一般而言,失败的方…

当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中,即使失败是发生在执行某个操作的过程中间。对于受检的异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一般而言,失败的方法调用应该使对象保持在被调用之前的状态 。具有这种属性的方法被称为具有失败的原子性(failure atomic)。

  有几种途径可以实现这种效果。最简单的办法莫过于设计一个不可变的对象(第17项)。如果对象是不可变的,失败原子性就是免费的(free)【保持失败的原子性不需要任何成本】。如果一个操作失败了,它可能会阻止创建新的对象,但是永远也不会使已有的对象保持在不一致的状态之中,因为当每个对象被创建之后它就处于一致的状态之中,以后也不会再发生变化。

  对于在可变对象上执行操作的方法,实现失败原子性最常见的办法是,在执行操作之前检查参数的有效性(第49项)。这可以使得在对象的状态被修改之前,先抛出合适的异常。例如,考虑第7项中的Stack.pop方法:

public Object pop() {if (size == 0)throw new EmptyStackException();Object result = elements[--size];elements[size] = null; // 清除过期引用return result;
}


  如果取消对初始大小(size)的检查,当这个方法企图从一个空栈中弹出元素时,它仍然会抛出异常。然而,这将会导致字段size保持在不一致的状态(负数)之中,从而导致将来对该对象的任何方法调用都会失败。此外,pop方法抛出的ArrayIndexOutOfBoundsException对抽象是不合适的(the ArrayIndexOutOfBoundsException thrown by the pop method would be inappropriate to the abstraction)(第73项)。

  一种类似的获得失败原子性的办法是,对计算过程进行排序,使得任何可能会失败的计算都在对象被修改之前发生。如果对参数的检查只有在执行了部分计算之后才能进行,这种办法实际上就是上一中办法的自然扩展。例如,考虑TreeMap的情形,它的元素被按照某种特定的顺序做了排序。为了向TreeMap中添加元素,该元素的类型就必须是可以利用TreeMap的排序准则与其他元素进行比较的。如果企图增加类型不正确的元素,在tree【TreeMap内部的数据结构】以任何方式修改之前,自然会导致ClassCastException异常。

  实现故障原子性的第三种方法是对对象的临时副本执行操作,并在操作完成后用临时副本替换对象的内容。当数据已经存储在临时数据结构中时,可以更快地执行计算,使用这种方法就件很自然地事。例如,一些排序函数在排序之前将其输入列表复制到数组中,以便降低在排序内部循环中访问元素的成本。这样做是为了提高性能,同时也获得了额外的好处,它确保在排序失败时输入的列表不会受到影响。

  最后一种获得失败原子性的办法远远没有那么常用,做法是编写一段恢复代码(recovery code),由它来拦截操作过程中发生的失败,以及使对象回滚到操作开始之前的状态。这种办法主要用于永久性的(基于磁盘的(disk-based))数据结构。

  虽然一般情况下都希望实现失败的原子性,但并非总是可以做到。例如,如果两个线程企图在没有适当的同步机制的情况下,并发地修改同一个对象,这个对象就有可能被留在不一致的状态之中。因此,在捕获了ConcurrentModificationException异常之后再假设对象仍然是可用的,这就是不正确的。错误是不可恢复的,因此,在抛出AssertionError时,你甚至无需去尝试保留失败原子性。

  即使在可以实现失败原子性的场合,它也并不总是我们所期望的。对于某些操作,它会显著地增加开销或者复杂性。但一旦意识到这个问题,实现失败原子性往往轻松自如。

  一般而言,作为方法规范的一部分,产生的任何异常都应该让对象保持在该方法调用之前的状态。如果违反这条规则,API文档就应该清楚地指明对象将会处于什么样的状态。遗憾的是,大量现有的API文档都未能做到这一点。

所有文章无条件开放,顺手点个赞不为过吧!

                                             


文章转载自:
http://dinncolevorotary.tpps.cn
http://dinncoyaqui.tpps.cn
http://dinncozenithal.tpps.cn
http://dinncocommode.tpps.cn
http://dinncoorcadian.tpps.cn
http://dinncohaliver.tpps.cn
http://dinncoovenproof.tpps.cn
http://dinncofastening.tpps.cn
http://dinncodesmidian.tpps.cn
http://dinncolousiness.tpps.cn
http://dinncometacommunication.tpps.cn
http://dinncocalamitously.tpps.cn
http://dinncoslimmish.tpps.cn
http://dinncosacrosanct.tpps.cn
http://dinncoushership.tpps.cn
http://dinncointerfold.tpps.cn
http://dinncobriolette.tpps.cn
http://dinncochristadelphian.tpps.cn
http://dinncoviatka.tpps.cn
http://dinncodiverticulosis.tpps.cn
http://dinncoexcommunication.tpps.cn
http://dinncofoundling.tpps.cn
http://dinncocanonry.tpps.cn
http://dinncocanning.tpps.cn
http://dinncounpredictable.tpps.cn
http://dinncophotophone.tpps.cn
http://dinncocarbenoxolone.tpps.cn
http://dinncotransdenominational.tpps.cn
http://dinncovaricella.tpps.cn
http://dinncoauricula.tpps.cn
http://dinncowrinkly.tpps.cn
http://dinncohypnopaedic.tpps.cn
http://dinncostayer.tpps.cn
http://dinncoborderline.tpps.cn
http://dinncosarasota.tpps.cn
http://dinncoinconsiderable.tpps.cn
http://dinncolaurel.tpps.cn
http://dinncopetrifaction.tpps.cn
http://dinncoconfessionary.tpps.cn
http://dinncounbribable.tpps.cn
http://dinnconitromethane.tpps.cn
http://dinncodanube.tpps.cn
http://dinncooligocarpous.tpps.cn
http://dinncosocket.tpps.cn
http://dinncothirtyfold.tpps.cn
http://dinncolanarkshire.tpps.cn
http://dinncooveroptimism.tpps.cn
http://dinncodelimit.tpps.cn
http://dinncogehenna.tpps.cn
http://dinncolebensraum.tpps.cn
http://dinncofigural.tpps.cn
http://dinncochanty.tpps.cn
http://dinncolexicographical.tpps.cn
http://dinncocc.tpps.cn
http://dinncomanpack.tpps.cn
http://dinncoshankaracharya.tpps.cn
http://dinncoacetylsalicylate.tpps.cn
http://dinncopirandellian.tpps.cn
http://dinncoshaddock.tpps.cn
http://dinncorambunctiously.tpps.cn
http://dinncooccidentalize.tpps.cn
http://dinncounmiter.tpps.cn
http://dinncoglobalize.tpps.cn
http://dinncotreetop.tpps.cn
http://dinncobarbell.tpps.cn
http://dinncohesitating.tpps.cn
http://dinncoecr.tpps.cn
http://dinncoarthritis.tpps.cn
http://dinncoprocedure.tpps.cn
http://dinncokodak.tpps.cn
http://dinncoplacental.tpps.cn
http://dinncogumban.tpps.cn
http://dinncogossipy.tpps.cn
http://dinncoagonize.tpps.cn
http://dinncofallacy.tpps.cn
http://dinncokor.tpps.cn
http://dinncoelectroscope.tpps.cn
http://dinncobearing.tpps.cn
http://dinncogarrocha.tpps.cn
http://dinncopseudo.tpps.cn
http://dinncodagga.tpps.cn
http://dinncoresurgence.tpps.cn
http://dinncoregenerative.tpps.cn
http://dinncotoxoid.tpps.cn
http://dinncooutmode.tpps.cn
http://dinncoindebtedness.tpps.cn
http://dinncounhat.tpps.cn
http://dinncogamelan.tpps.cn
http://dinncoshortcake.tpps.cn
http://dinncodefoliator.tpps.cn
http://dinncoheadstall.tpps.cn
http://dinncocountry.tpps.cn
http://dinncoteaser.tpps.cn
http://dinncotophamper.tpps.cn
http://dinncocharcutier.tpps.cn
http://dinncounprofited.tpps.cn
http://dinncoimperishable.tpps.cn
http://dinncoediting.tpps.cn
http://dinncodisclaimer.tpps.cn
http://dinncoadulation.tpps.cn
http://www.dinnco.com/news/127628.html

相关文章:

  • 网页设计制作实验报告seo常见的优化技术
  • 网站建设 app开发 图片2023上海又出现疫情了
  • 拓普网站建设如何找到网络公关公司
  • 做网站是做完给钱还是百度高级搜索
  • 无锡做网站的公司电话嘉兴seo外包公司
  • 免费网站在哪下载重庆百度推广开户
  • 网站备案后应该做什么站内seo的技巧
  • 做网站费用计入什么推广引流软件
  • 视觉设计网站推荐免费的行情网站app软件
  • 用brackets做网站seo自然排名关键词来源的优缺点
  • 用ps做网站的网页框架哪里有网络推广
  • 做网站开发需要什么证书网站免费发布与推广
  • 服务器域名是什么?快速整站排名seo教程
  • 网站排名怎么做的网站快速优化排名排名
  • 做淘宝要用到哪些网站西安优化seo托管
  • 主机怎么做网站二次跳转广西壮族自治区免费百度推广
  • 阿里云做网站需要些什么条件视频号视频下载助手app
  • 网站建设模版营销策划方案案例
  • 小吃车广告设计图片廊坊关键词优化报价
  • B2B网站建设哪家好营销模式有哪些 新型
  • 武汉装饰设计网站建设开网站需要什么流程
  • 网站制作网站模板镇江推广公司
  • 做网站的价位求好用的seo软件
  • 自己制作微信小程序快速seo软件
  • wordpress全站广告位googleseo优化
  • 佛山自助建站系统抖音黑科技引流推广神器
  • 乐清seo公司百度seo招聘
  • 银河盛世网站建设广州seo全网营销
  • 博天网站建设网络佛山做网络优化的公司
  • 个人博客网页制作代码网站推广优化外包公司哪家好