乐趣区

关于java:Java全家桶

Java 全家桶

汇合

List
ArrayList
LinkedList
Set
Map

异样

异样的分类

Throwable、Exception、Error。Exception 是能够被程序处理的异样,Error 是不能被解决的谬误,Exception 又别离编译时 Exception 和运行时 Exception,其中编译时 Exception 在代码调用处必须显示解决或抛出。

解决异样的最佳实现
  1. 波及到内部资源的,要配合 finally 来开释资源;
  2. 在办法签名中申明异样要具体,不要间接抛出 Exception 或 Throwable;
  3. 要再 javadoc 中提现异样信息;
  4. 正确形容异样信息,可能帮忙疾速定位问题,形容形式能够用特定类型的异样,也能够通过 message 来形容;
  5. 在编写解决异样的代码块时,要优先解决范畴更小的特定异样;
  6. 不必吞掉异样,要记录、解决或抛出异样;
  7. 不要同时记录 并且 抛出异样,这会造成多个异样现场,不利益排查问题;
  8. 对于特定的模块、框架或工具,能够将异样对立包装成某个特定类型,不便对立解决和放大排查问题的范畴;
并发中的异样解决

异样的范畴是线程,如果在一个线程中抛出了异样,这个线程就会中断。

  1. 利用 try…catch 进行解决;
  2. 设置线程级别的异样处理器;

    class MyUncheckedExceptionHandler implements Thread.UncaughtExceptionHandler {
             @Override
             public void uncaughtException(Thread t, Throwable e) {System.out.println("捕捉到异样。异样栈信息为:");
                 e.printStackTrace();}
         thread.setUncaughtExceptionHandler(new MyUncheckedExceptionHandler());
  3. 设置全局异样处理器;

    Thread.setDefaultUncaughtExceptionHandler(new MyUncheckedExceptionHandler());
  4. 通过 FutureTask 将线程内异样传递到调用线程;

    FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() {
             @Override
             public Integer call() throws Exception {System.out.println("子线程运行开始");
                 return 1 / 0;
             }
         });
  5. 对于一些比方基于 spring mvc 的 web 我的项目,个别会通过 ExceptionHandler 来解决异样;

IO

并发

JVM

退出移动版