【问题标题】:How to implement Erlang's "Let it crash" concept in java [closed]如何在java中实现Erlang的“让它崩溃”的概念[关闭]
【发布时间】:2017-09-06 08:56:07
【问题描述】:

我一直在寻找关于这个概念/设计模式/它被称为什么的任何简单示例,我想查看 java 中的任何简单示例,我想知道是否可以在 android 应用程序中应用这个概念与否,我已经在 android 中使用演员模型,但我想对其应用“让它崩溃”模式,我在哪里可以找到任何 java 示例或解释......我总是看到没有代码的高级讨论在它甚至 UML 中

我什么都没试过,因为我无法想象它是如何完成的!

【问题讨论】:

    标签: java crash erlang actor


    【解决方案1】:

    几年来(2003-2009 年),我在 Java 中有一种方法可以做到这一点。然后我发现了 Erlang 的工作原理,并从那时起开始编写 Erlang 代码。如果我必须再次编写 Java 代码,我肯定会使用这种模式。

    我在一些主要网站项目中使用 Java 的方式是这样的:

    1. 尽可能避免使用 try-catch 块。让代码在 NullPointerExceptions 和类似的 RuntimeExceptions 子类上崩溃。
    2. 从 RuntimeException 继承的所有异常都是“正常”的,并且会在运行时产生崩溃。只要确保它们被记录(在服务器上)或以某种方式处理(在客户端)。在一个中心位置执行此默认崩溃处理以避免代码重复。
    3. 有时,Java 编译器会强制您处理捕获的异常。然后在 RuntimeException 中重新抛出捕获的异常。

    这是捕获编译器强制您处理的已检查异常 java.sql.SQLException 的经典示例,并将其追溯为 RuntimeException。

    try {
      your code here...
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }

    这就像一个魅力。保留完整的堆栈跟踪,并且不会丢失任何信息。编译器很高兴,您也很高兴,因为您已将 Java 检查异常转换为 RuntimeException。

    1. 您自己定义的所有异常以及您在代码中明确抛出的所有异常都应继承自 java.lang.RuntimeException。

    祝你好运!

    这种错误处理方法使我的 Java 代码库变得如此之小,并且确实变成了“让它崩溃”。不完美,但好多了。

    【讨论】:

    • 非常感谢您的回复,所以您的意思是,除了默认的未捕获异常处理程序之外,我不会处理任何异常,但这意味着当它崩溃时我将重新启动整个对象/actor。 .. 它的状态如何,假设一个actor在解析来自服务器的响应时崩溃了,这是如何处理的?
    • 我的意思是如果我重新启动actor,每次完成这个请求时它都会一直崩溃! ...我在哪里可以找到一些关于 erlang 如何处理这个问题的资料?
    • erlang 处理崩溃进程的重启逻辑的方法是使用主管或主管层次结构完成的。这是以某种智能控制方式处理无限崩溃循环的非常酷的东西。如果你有东西反复崩溃(比如你的演员),可以将主管逻辑配置为允许 X 次重新启动,然后主管将放弃并改为崩溃。更多关于 Erlang 主管的信息以及他们有多酷:learnyousomeerlang.com/supervisors
    • 我不知道有任何 Java 功能可以像 Erlang 主管一样工作。这可能是未知领域,我不知道。但是如果你学习了 Erlang 主管的概念和逻辑,你可以在你的 Java 代码中为你的特定用例实现一些简单和类似的东西。与 Java 相比,Erlang 总是少得多的代码和更高的稳定性。
    • 非常感谢,请将这些 cmets 添加到答案中,以便我可以将其标记为已接受的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2014-08-16
    • 2020-03-23
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多