finally是异步的吗
有的人在finally里面打大段的json日志。如果日志比较长,会影响性能
,因为finally并不是异步的。 finally的语句会在return之前调用。
下面2个方法拷贝到任意类即可:
public static void main(String[] args) {
String result=rpc();
System.out.println("rpc调用完成,结果为: "+result);
}
public static String rpc(){
try {
System.out.println("rpc调用开始");
System.out.println(0/0); // 异常
}catch (Exception e){
e.printStackTrace();
}finally {
try {
Thread.sleep(5000); // 延时
} catch (InterruptedException e) {
e.printStackTrace();
}
return "1万元";
}
}
如果序列化内容比较多,而且必要的话,解决方案:
第一种:启动一个线程来打印日志
第二种:使用logback的异步日志
finally是否要加日志
finally主要用来处理发生异常来不及处理的逻辑,例如资源的释放等。 但是日志完全可以做到无论什么情况都打印。 开始、完成、异常。3条日志覆盖整个过程。
所以finally根本不用加日志。