文章目录
题记:书到用时方恨少,钱到月底不够花!
此文是读取一些关于并发工具、并发类的框架(多是入门级别)的文章时,取精去粕之后的总结,不过更多应该算是备忘了。日常工作中,并发工具其实并不常用,往往碰见适用的场景时又偏偏 记不起对应的API了。本文,专治此症。
此外,在此立个flag,凡有读书,必有输出!
0、多线程异常处理
之所以将本节放置在第0节,是因为多线程的异常处理会穿插在下面的所有章节中。
- 子线程的异常是不能抛出到父线程中捕获的
为啥呢?
因为线程是独立执行的代码片段,每个线程的问题应该由自己来解决,而不要委托到外部。
线程方法的异常都应该在线程代码块之内(run方法内)进行try catch并处理掉.换句话说,我们不能捕获从线程中逃逸的异常。
不过,我们可以在子线程代码块中try catch处理了异常之后,再主动抛出异常,这样当父线程中需要从子线程获取执行结果时,就会抛出这个异常,从而中断父线程流程;但若父线程并不关心子线程的执行结果,那么这个异常并不会影响父线程流程。 - 我们可利用Java5的 Thread.UncaughtExceptionHandler 类来定义异常处理器。(TODO :demo)
一、ExecutorCompletionService
处理多并行任务’完成一个就返回
’
- java8自带的工具类,在实现多任务并处理时好用,既可以适用于
完成一个就返回
,也适于全部完成才返回
,比自己用CompletableFuture
或Future ExecutorService.submit()
手搓更优雅