并发类

作者: 小陈阿飞 | 来源:发表于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