在 lambda 表达式中创建的对象未存储

Object created in lambda expression not stored

使用下面的代码片段,

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(队列)中。但它最后给了我空队列。任何建议

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

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