代码之家  ›  专栏  ›  技术社区  ›  Gabriel Ščerbák

Java:捕捉异常是异步的吗?

  •  1
  • Gabriel Ščerbák  · 技术社区  · 14 年前

    我问是因为如果不是,它可以被滥用为同步机制。我问的是JAVA。

    4 回复  |  直到 14 年前
        1
  •  6
  •   Michael Borgwardt    14 年前

    我不确定你所说的“可以被滥用为同步机制”是什么意思——这没有道理。

    每个线程都有异常——当抛出异常时,当前线程的执行将跳转到捕获异常的位置。如果它一点也没有被抓住,线就会死。其他线程不受影响。

        2
  •  5
  •   polygenelubricants    14 年前

    JLS 11.3.2 Handling Asynchronous Exceptions

    大多数异常是同步发生的,因为它们发生的线程的一个操作的结果,并且在程序中被指定可能导致这种异常的一个点上。相反,异步异常是一种可能在程序执行过程中的任何一点发生的异常。

    如果要生成高质量的机器代码,必须正确理解异步异常的语义。

    异步异常很少 . 它们只因以下原因发生:

    • 调用 stop 类线程或线程组的方法
    • Java虚拟机中的内部错误

    所以不,虽然很少见,但不是全部 Exception 处理是同步的。

        3
  •  0
  •   Anemoia    14 年前

    不,它是同步的。

    尝试使用调试器单步执行代码,您将看到它一行接一行地执行,如果在catch中中断,它将不会继续执行。

        4
  •  0
  •   Vaishak Suresh    14 年前

    在执行线程期间发生异常。异步捕获是没有意义的,因为线程必须处理异常。在捕获并处理异常之前,它无法继续。如果未捕获或抛出异常,则线程不知道它必须做什么,而简单地终止,并且程序可能/可能不会出现错误行为。

    一个线程抛出一个异常,然后在不等待捕获的情况下继续进行是没有意义的。

    要回答您的问题,没有捕获对于所有实际用途都不是异步的。