目 录CONTENT

文章目录

guava - 优秀的线程池扩展

FatFish1
2024-10-28 / 0 评论 / 0 点赞 / 54 阅读 / 0 字 / 正在检测是否收录...

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执行

0

评论区