共计 1101 个字符,预计需要花费 3 分钟才能阅读完成。
Java 全家桶
汇合
List
ArrayList
LinkedList
Set
Map
异样
异样的分类
Throwable、Exception、Error。Exception 是能够被程序处理的异样,Error 是不能被解决的谬误,Exception 又别离编译时 Exception 和运行时 Exception,其中编译时 Exception 在代码调用处必须显示解决或抛出。
解决异样的最佳实现
- 波及到内部资源的,要配合 finally 来开释资源;
- 在办法签名中申明异样要具体,不要间接抛出 Exception 或 Throwable;
- 要再 javadoc 中提现异样信息;
- 正确形容异样信息,可能帮忙疾速定位问题,形容形式能够用特定类型的异样,也能够通过 message 来形容;
- 在编写解决异样的代码块时,要优先解决范畴更小的特定异样;
- 不必吞掉异样,要记录、解决或抛出异样;
- 不要同时记录 并且 抛出异样,这会造成多个异样现场,不利益排查问题;
- 对于特定的模块、框架或工具,能够将异样对立包装成某个特定类型,不便对立解决和放大排查问题的范畴;
并发中的异样解决
异样的范畴是线程,如果在一个线程中抛出了异样,这个线程就会中断。
- 利用 try…catch 进行解决;
-
设置线程级别的异样处理器;
class MyUncheckedExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) {System.out.println("捕捉到异样。异样栈信息为:"); e.printStackTrace();} thread.setUncaughtExceptionHandler(new MyUncheckedExceptionHandler());
-
设置全局异样处理器;
Thread.setDefaultUncaughtExceptionHandler(new MyUncheckedExceptionHandler());
-
通过 FutureTask 将线程内异样传递到调用线程;
FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() { @Override public Integer call() throws Exception {System.out.println("子线程运行开始"); return 1 / 0; } });
- 对于一些比方基于 spring mvc 的 web 我的项目,个别会通过 ExceptionHandler 来解决异样;
IO
并发
JVM
正文完