java中如何一次抛出多个异常

匿名- 2023-08-20 17:47:13

Java 异常处理的误区和经验总结

这篇文章给大家聊聊关于java中如何一次抛出多个异常,以及java异常数建议不超过几个对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

  1. 一个java进程发生了OOM后,该进程或服务一定会被杀死吗
  2. java中如何一次抛出多个异常
  3. Java程序发生异常就挂了吗
  4. java中多线程常见的几个参数

一个java进程发生了OOM后,该进程或服务一定会被杀死吗

不一定。

一个线程OOM后,其他线程是可以正常运行的,但是内存泄露之后可能会导致整个程序内存溢出,最终程序不可用。

那么我们下面说一下,一个线程OOM了,为什么其他线程不受影响呢?

要回答这个问题,我们先来回想一下java的内存结构。如下图所示:

我们知道,多线程的时候,每个线程都拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。堆是线程共享的,所以理论上一个线程OOM了,其他线程应该受影响才对啊,实际上却并不是,这是什么原因呢?

有兴趣的可以按照我下面的这段代码自己去跑一下,测试一下这个内存溢出。

然后结合JvisualVM工具,你会看到,在程序内存溢出之后,溢出的内存的线程所占的内存会被快速释放。如下图所示

根据上图,我们可以得出当一个线程抛出OOM异常后,它所占据的内存资源会被快速的释放掉,从而不会影响其他线程的运行!

另外当一个线程OutOfMemoryError后,如果这个OutOfMemoryError被捕获,那么catch之后吞掉的话程序还能试着继续运行。发生OutOfMemoryError之后,只是当前这个线程申请更多的内存的时候不被JVM允许,所以会抛出OutOfMemoryError异常。当抛出OutOfMemoryError异常后,当前这个线程会被退出,它所占的内存会被JVM清理掉。

那么JVM为什么要这么设计呢?

答案是,Java程序通常不是为了适应意外的异常而设计的,OOM之后可能导致应用状态不一致,建议最好重启。

java中如何一次抛出多个异常

Java是不允许同时抛出多个异常的,一个java方法中只能有一个异常栈,最后一次捕获抛出的异常会覆盖前面的异常。

当然也有奇淫伎俩,你做一个封装类异常把每次抛的异常装起来一次抛出。但我不知道这样的使用场景是什么。

Java程序发生异常就挂了吗

异常了就需要你去处理的,对于RuntimeException不用去处理,对于出现异常的代码,可以try也可以继续抛,try{需要检测的代码}catch(Exceptione){处理方法},继续抛的意思就是你不去处理继续抛出。

java中多线程常见的几个参数

java中多线程常见的几个参数:

sleep:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).

此操作受到系统计时器和调度程序精度和准确性的影响。

该线程不丢失任何监视器的所属权。

调用sleep的时候锁并没有被释放。

休眠

JavaSE5引入了更加显示的sleep()作为TimeUnit类的一部分,这个方法允许你指定sleep()延迟的时间单元,因此可以提供更好的可阅读性。

wait:调用wait使线程挂起,直到线程得到了notify或notifyAll消息,线程才会进入就绪状态。

使你可以等待某个条件发生变化,而改变这个条件超出了当前方法的控制能力。

线程的执行被挂起,对象上的锁被释放。意味着另一个任务可以获得这个锁。

因此在该对象中的其他synchronized方法可以在wait期间被调用。

yield:相当于:我的工作已经做的差不多了,可以让给别的线程使用CPU了。

当调用yield时,你也是在建议具有相同优先级的其他线程可以运行。

对于任何重要的控制或在调整应用时,都不能依赖于yield。

yield并不意味着退出和暂停,只是,告诉线程调度如果有人需要,可以先拿去,我过会再执行,没人需要,我继续执行

调用yield的时候锁并没有被释放。

interrupt:中断线程。

Thread类包含interrupt()方法,因此你可以中止被阻塞的任务。

这个方法将设置线程的中断状态。

如果一个线程已经被阻塞,或者试图执行一个阻塞操作,那么设置这个线程的中断状态将抛出InterruptedException。

当抛出该异常或者该任何调用Thread.interrupted()时,中断状态将复位。

你在Executor上调用shutdownNow(),那么它将发送一个interrupt()调用给他启动的所有线程。

关于java中如何一次抛出多个异常,java异常数建议不超过几个的介绍到此结束,希望对大家有所帮助。

Java零基础如何进入软件行业
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.66688815.com/12/100944.html
上一篇:产妇牙膏有必要买吗(产妇用专用牙膏有必要吗)
下一篇:K色的钻石是不是很不好(钻石 k色)
相关文章
返回顶部小火箭