在 lambda 表达式中创建的对象未存储
Posted
技术标签:
【中文标题】在 lambda 表达式中创建的对象未存储【英文标题】:Object created in lambda expression not stored 【发布时间】: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(队列)中。但它最后给了我空队列。任何建议
【问题讨论】:
【参考方案1】:您要求执行程序在另一个线程上执行任务。这可能需要一些时间来启动必要的线程并执行工作,同时,您的主线程已经打印了formList
的当前内容(即什么都没有)。
为了能够打印任务的结果,您需要等到任务完成,例如关闭ExecutorService
并等待终止,或者使用ExecutorService.submit
而不是Executor.execute
,以及收集返回的期货并在所有这些期货上使用get
以等待它们完成。还有很多其他选项,例如使用CompletionService
或CompletableFuture
等。
【讨论】:
以上是关于在 lambda 表达式中创建的对象未存储的主要内容,如果未能解决你的问题,请参考以下文章
如何为在 Cloudformation 中创建的 Lambda 设置 Cloudwatch 日志