并发类

作者: 小陈阿飞 | 来源:发表于2019-01-03 18:55 被阅读7次
一、ThreadFactoryBuilder

ThreadFactoryBuilder主要用于线程池技术中。当我们需要给新创建的线程取名字、或者设置为守护线程、错误处理器等操作时,线程工厂的好处就提现出来了。

  1. 不用ThreadFactoryBuilder的时候 我们这么写代码。我们每次要新建一个类来实现ThreadFactory,有点繁琐。
image
  1. 用了ThreadFactoryBuilder之后,好处不言而喻。ThreadFactoryBuilder是一个Builder设计模式的应用,可以设置守护进程、错误处理器、线程名字。
image

三、ListenableFuture

ListenableFuture是基于装饰器模式实现的:

    ListeningExecutorService listeningExecutor = MoreExecutors.listeningDecorator(executor);
    final ListenableFuture<String> future = listeningExecutor.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                TimeUnit.SECONDS.sleep(2);
                return "hello_world";
            }
        });

我们可以对ExecutorService做一层包装,返回一个ListenableFuture实例,而ListenableFuture又是集成自Future,扩展了一个addListener监听方法,当任务执行完成,会主动回调该方法。主要也是弥补了JDK自带Future的不足,像Netty也优雅的实现了异步回调机制,不需要手动通过Future.get()来获取结果。

        future.addListener(new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("收到通知..." + future.get());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }
        }, listeningExecutor);

四、Futures.addCallback
也是基于异步回调的机制,个人觉得更加雅观。

        Futures.addCallback(future, new FutureCallback<String>() {

            @Override
            public void onSuccess(String result) {
            }

            @Override
            public void onFailure(Throwable t) {
                System.out.println("futureException: ");
                t.printStackTrace();
            }
        });

相关文章

网友评论

      本文标题:并发类

      本文链接:https://www.haomeiwen.com/subject/asyqrqtx.html