一次不引用包跑外部依赖的实践(六)代码打磨

 

一次不引用包跑外部依赖的实践(八)异常

 

 https://pan.baidu.com/s/1VmvAlknO87ev61ETKif_9g 

 

1 异常没有往上抛,也没有打日志

2 可以不抛,但要打日志,并break(因为下一个future.get继续会被interruptedException)

3 生产者的get应当放到最后或不放,所有消费者挂掉,线程显示生产者阻塞,没有消费者,程序一直卡在第一个生产者future,且没有超时

直到对该方法所在线程执行cancel触发第一个生产者的future.get的interrupted时,后续所有消费者future.get得以执行并获得ExecutionException

如果后续Consumer仍然在跑,就会获得一个InterruptedException

4 有异常后应当手动cancel所有future子线程,尤其是自己 

future.get

interrupted {

  future.cancel

}

现在没有这个,所以future里面的生产者还卡在bq的put方法,

 

5 没有向上抛异常,所以一次不引用包跑外部依赖的实践(七)代码 里面最终只能用该方法所在线程的isInterrupted来给job状态,还遇到坑内存泄漏事故(三)线程的interrupted flag 的坑【重要】

 

 

 

 

*

future get先抛哪个异常,interrupt还是execution

 

 

  job快 cancel快
正常 success InterruptedException
异常 ExecutionException InterruptedException

 

 

*

实践中思考经过

日志没有找到消费者,两种可能,1消费者没起来 2 消费者挂了,但消费者挂的日志呢?

posted on 2025-04-21 23:04  silyvin  阅读(16)  评论(0)    收藏  举报