java - java方法中的多线程
问题描述
我有一个方法,我想一次运行两个线程。
以下是方法
@PostMapping(value = "/sendmails")
public ResponseEntity<Object> sendEmails(@RequestParam("file") MultipartFile reapExcelDataFile) {
bulkMailProcessor.processor(reapExcelDataFile);
return ResponseEntity.status(HttpStatus.OK).build();
}
我想运行bulkMailProcessor.processor(reapExcelDataFile);
线路,我不想等到邮件发送过程完成,主线程需要继续发送邮件,但另一个线程需要启动并将结果发回。我怎样才能实现这个功能。
解决方案
使用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"
推荐阅读
- node.js - Mongoose 代码在声明一个新查询后卡住了
- ruby-on-rails - Ruby on Rails 用户和密码验证
- linux - 在 Gitlab CI 管道步骤中加载 .sh 文件作为脚本
- svelte - Sapper 和 Svelte 滚动条示例
- python - 仅从用户获取整数
- python - Keras 中 Kronecker 产品的自定义 Lambda 层 - 为 batch_size 保留的维度存在问题
- node.js - Firebase 函数使用 nodejs 搜索查询实时数据库
- python - 保持一个socket监听python,避免破管错误
- node.js - 我想对 Google 上的操作使用 Firebase 身份验证
- sql - SQL 5 最常借书