ThreadFactoryBuilder - guava线程工厂
Executor pool = Executors.newSingleThreadExecutor(new
ThreadFactoryBuilder.setNameFormat(“TestThread” + “-%d”).setUncaughtExceptionHandler(方法).build());
通过setxxx方法配置工厂生产配方,通过.buld方法返回ThreadFactory方法,经常可以用在线程池中作为线程工厂类传入
ListeningExecutorService和MoreExecutors工具类 - guava线程装饰器
可以使用线程装饰器装饰普通线程。普通线程返回的Future功能有限,使用线程装饰器装饰后即可监听结果,使用Future.addCallback
方法,做后续处理。Future.addCallback
方法能够在不阻塞主线程的情况下,另开一个结果处理线程去处理返回结果。
通过guava提供的MoreExecutors工具类的listeningDecorator
装饰器就可以创造一个ListeningExecutorService
,ListeningExecutorService
可以为线程添加回调函数。
使用Listening的好处在于可以把Future结果自动提交到一个异步线程池中去处理。
使用步骤如下:
创建任意一个普通线程池
使用线程装饰器装饰普通线程池
ListeningExecutorService listeningExecutorService =
MoreExecutors.listeningDecorator(fixedThreadPoolExecutor);
向包装后的线程池提交任务
ListenableFuture future =listeningExecutorService.submit(Runnable run);
这里需要注意的是只有submit提交任务才能被做监听。
重写回调函数
Futures.addCallback(future, new FutureCallback<返回类型>({}))
分别重写onSuccess和onFailure,处理成功结果和异常结果。onSuccess的入参是FutureCallback的返回类型,onFailure是固定的Throwable
Futures.addListener(Runnable run, Thread thread)
也可以通过addListener放法添加忽略结果的监听,当发现监听的线程执行完成后,addListern将异步回调任务run提交给传入的线程thread执行
评论区