繁体   English   中英

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

[英]Java: Is catching exceptions asynchronous?

我问是因为如果不是,它可能会被滥用为同步机制。 我在问Java。

我不确定“被滥用为同步机制”是什么意思-这没有道理。

每个线程都有异常-引发异常时,当前线程的执行将跳至捕获异常的地方。 如果根本没有捕获到该线程,则该线程死亡。 其他线程不受影响。

JLS 11.3.2处理异步异常

大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中的某个位置被指定可能导致此类异常。 相反,异步异常是在程序执行的任何时候都可能发生的异常。

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

异步异常很少见 它们仅由于以下原因而发生:

  • 调用Thread或ThreadGroup类的stop方法
  • Java虚拟机中的内部错误

因此,虽然不是很罕见,但并非所有的Exception处理都是同步的。

不,它是同步的。

尝试使用调试器单步执行代码,您将看到它逐行执行,并且如果您在陷阱内中断,它将不会继续执行。

在线程执行期间发生异常。 异步捕获是没有意义的,因为线程必须处理异常。 在捕获并处理异常之前,它无法继续进行。 如果未捕获或引发异常,则线程不知道它必须做什么,并且简单死掉,程序可能/可能不会行为不当。

线程引发异常,然后不等待捕获就继续执行没有意义。

要回答您的问题,就所有实际目的而言,捕获都不是异步的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM