首页 > 解决方案 > java方法中的多线程

问题描述

我有一个方法,我想一次运行两个线程。

以下是方法

@PostMapping(value = "/sendmails")
    public ResponseEntity<Object> sendEmails(@RequestParam("file") MultipartFile reapExcelDataFile) {

        bulkMailProcessor.processor(reapExcelDataFile);

        return ResponseEntity.status(HttpStatus.OK).build();
    }

我想运行bulkMailProcessor.processor(reapExcelDataFile);线路,我不想等到邮件发送过程完成,主线程需要继续发送邮件,但另一个线程需要启动并将结果发回。我怎样才能实现这个功能。

标签: javamultithreading

解决方案


使用CompletableFuture. 它将处理创建线程执行器、运行线程等。

如果您只想剥离一个流程而不关心返回使用:

CompletableFuture.runAsync(() -> someConsumingCode; );

如果您想向函数返回一些值,您可以通过链接 api 提供的各种方法来传递结果...

CompletableFuture.supplyAsync(() -> someSupplyingCode()).thenApply((outputofSomeSupplyingCode) -> consumeOutputOfSomeSupplyingCode(outputOfSomeSupplyingCode));

当您希望主线程等待结果时,您可以将结果分配给一个变量,然后调用 get 方法CompletableFuture.get()::

CompletableFuture<String> resultFuture = CompletableFuture.supplyAsync(() -> "HelloWorld");
String result = resultFuture.get();
System.out.println(result); // outputs "HelloWorld"

推荐阅读