【问题标题】:Object created in lambda expression not stored在 lambda 表达式中创建的对象未存储
【发布时间】:2021-09-09 09:56:11
【问题描述】:

下面的代码sn-p,

String[][] users = {user1, user2, user3, user4, user5};
    
Queue<Form> formList = new ArrayBlockingQueue<>(5);

Executor executor = Executors.newCachedThreadPool();
executor.execute(() -> {
    System.out.println(Thread.currentThread().getName());
    for(String[] user: users) {
        Form f = new Form(user[0], user[1], user[2], user[3], user[4]);
        formList.add(f);
    }
});
System.out.println(formList);

我想将在 lambda 中创建的所有表单存储在 formList(队列)中。但它最后给了我空队列。任何建议

【问题讨论】:

    标签: java lambda threadpool threadpoolexecutor


    【解决方案1】:

    您要求执行程序在另一个线程上执行任务。这可能需要一些时间来启动必要的线程并执行工作,同时,您的主线程已经打印了formList 的当前内容(即什么都没有)。

    为了能够打印任务的结果,您需要等到任务完成,例如关闭ExecutorService 并等待终止,或者使用ExecutorService.submit 而不是Executor.execute,以及收集返回的期货并在所有这些期货上使用get 以等待它们完成。还有很多其他选项,例如使用CompletionServiceCompletableFuture 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多