ListenableFuture和countdownlatch使用example

这篇具有很好参考价值的文章主要介绍了ListenableFuture和countdownlatch使用example。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ListenableFuture可以允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 或者在运算(多线程执行)完成后立即执行文章来源地址https://www.toymoban.com/news/detail-732224.html

import com.google.common.util.concurrent.*;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 如果需要所有的listenableFuture返回结果,可以使用countdownlatch,在Futures.addCallback的success里面把countdownlatch减1
 * 等countdownlatch=0的时候,所有的listenableFuture都计算完成
 */
public class ListenableFutureLearn2 {

    public void test3() throws Exception {
        ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
        // 执行任务
        final ListenableFuture<String> listenableFuture = executorService.submit(new Callable<String>() {
            public String call() throws Exception {
                for (int i = 0; i < 10000; i++) {
                    System.out.println(i);
                }
                return "success";
            }

        });
        final ListenableFuture<String> listenableFuture2 = executorService.submit(new Callable<String>() {
            public String call() throws Exception {
                for (int i = 0; i < 10000; i++) {
                    System.out.println(-i);
                }
                return "success";
            }

        });
        // 绑定任务以及回调函数
        Futures.addCallback(listenableFuture, new FutureCallback<String>() {
                    @Override
                    public void onSuccess(String result) {
                        String str = "";
                        try {
                            str = listenableFuture.get();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        } catch (ExecutionException e) {
                            e.printStackTrace();
                        }
                        System.out.println("integer:" + str);
                        System.out.println("result:" + result);
                    }

                    @Override
                    public void onFailure(Throwable t) {
                        System.out.println("error" + t.getMessage());
                    }
                }
                , MoreExecutors.directExecutor());

        Futures.addCallback(listenableFuture2, new FutureCallback<String>() {
                    @Override
                    public void onSuccess(String result) {
                        String str = "";
                        try {
                            str = listenableFuture.get();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        } catch (ExecutionException e) {
                            e.printStackTrace();
                        }
                        System.out.println("integer:" + str);
                        System.out.println("result:" + result);
                    }

                    @Override
                    public void onFailure(Throwable t) {
                        System.out.println("error" + t.getMessage());
                    }
                }
                , MoreExecutors.directExecutor());
        TimeUnit.MILLISECONDS.sleep(500);
        System.out.println("listenableFuture:" + listenableFuture.get());
    }

    public static void main(String[] args) throws Exception {
        new ListenableFutureLearn2().test3();
    }
}

到了这里,关于ListenableFuture和countdownlatch使用example的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java并发工具CountDownLatch的使用和原理

    CountDownLatch 允许一个或多个线程等待其他线程完成操作。 假如有这样一个需求:我们需要解析一个 Excel 里多个 sheet 的数据,此时可以考虑使用多线程,每个线程解析一个 sheet 里的数据,等到所有的 sheet 都解析完之后,程序需要提示解析完成。在这个需求中,要实现主线程

    2024年02月16日
    浏览(25)
  • CountDownLatch使用错误+未最终断开连接导致线程池资源耗尽

            我设置了CountDownLatch对线程的协作做出了一些限制,但是我发现运行一段时间以后便发现定时任务不运行了。 具体代码: 报错以后定时任务不运行了   打印线程日志发现定时任务的线程在第86行代码停着不动了。 正常的线程日志应该是这样的。 查看第86行代码,

    2024年04月24日
    浏览(29)
  • 在langchain中使用自定义example selector

    在langchain中使用自定义example selector 在之前的文章中,我们提到了可以在跟大模型交互的时候,给大模型提供一些具体的例子内容,方便大模型从这些内容中获取想要的答案。这种方便的机制在langchain中叫做FewShotPromptTemplate。 如果例子内容少的话,其实无所谓,我们可以把所

    2024年02月13日
    浏览(38)
  • CompletableFuture、ListenableFuture高级用列

    CompletableFuture 链式 异步操作集合对象入库 CompletableFuture 异常 ListenableFuture

    2024年02月02日
    浏览(27)
  • 【HDFS】ListenableFuture在HDFS中的应用

    本文主要介绍以下内容: ListenableFuture提供的功能和基本使用方法; AsyncLogger、IPCLoggerChannel(它是AsyncLogger的子类) QuorumCall类 ListenableFuture 是 Guava 库中提供的一个接口,它扩展了 JDK 中的 Future 接口,并添加了异步任务完成后的回调机制。 ListenableFuture 提供了以下功能: 异步

    2024年02月13日
    浏览(26)
  • 尝试一下Guava带返回值的多线程处理类ListenableFuture

    最近在学习,Java实现异步编程的8种方式这篇博客的时候,没有找到比较好的一个学习demo,故在此整理一下。 ListenableFuture是Java中的一个接口,它继承自java.util.concurrent.Future接口。ListenableFuture主要用于异步计算场景,允许在计算完成后添加回调函数(Callback),从而实现对异

    2024年02月13日
    浏览(36)
  • CountDownLatch用法详解

    深入理解CountDownLatch计数器 线程计数器 用于线程执行任务,计数 等待线程结束 用法一: 等待所有的事情都做完 始终是2个线程在做事情,等2个线程做完事情才会停止下来。 用法二:假设2个线程做事情,刚开始并行做事情,等一个执行完成之后,另一个才能执行( 实际还是计数 )

    2023年04月19日
    浏览(33)
  • CountDownLatch

    这个类是在java.util.concurrent并发包里面 允许一个或者多个线程一直等待,直到其他线程执行完成后再执行 举例:班长和5名同学都在教室里面写作业,班长必须等五个同学都走了之后,才能把教师门的锁锁上 这是通过一个计数器来实现的,计数器初始化的值为线程的数量,每

    2024年02月06日
    浏览(61)
  • CompletableFuture真香,可以替代CountDownLatch!

    之前我们提到了 Future 和 Promise。Future 相当于一个占位符,代表一个操作将来的结果。一般通过 get 可以直接阻塞得到结果,或者让它异步执行然后通过 callback 回调结果。 但如果回调中嵌入了回调呢?如果层次很深,就是回调地狱。 Java 中的 CompletableFuture 其实就是 Promise,用

    2024年02月08日
    浏览(30)
  • 【Java基础】线程同步类 CountDownLatch

    ​ 关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 正好今天项目中用到了CountDownLatch,那我们正好总结一下,通过本文你可以学到什么是CountDownLatch及其原理,

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包