@RestController
public class ThreadController {
@Resource(name = "taskExecutor")
private ThreadPoolTaskExecutor executor;
@GetMapping("/check")
public Map<String, Object> check() throws Exception{
Map<String, Object> map = new HashMap<>();
Future<Integer> pa = executor.submit(new CheckPrice(a));
Future<Integer> pb = executor.submit(new CheckPrice(b));
Future<Integer> pc = executor.submit(new CheckPrice(c));
Integer[] priceList = { pa.get(), pb.get(), pc.get() };
map.put("最小价格", Collections.min(Arrays.asList(priceList)));
return map;
}
}
假设每个 CheckPrice 需要 2 秒耗时, 有多人同时访问"/check"的时候, 怎样才能让每个人都只是等 2 秒, 而不用排队一个个处理?
貌似只要是需要等待 Future.get 结果的, controller 都是堵住的, CompletableFuture 也看了一个早上, 好像也会堵 controller, 或者返回空值的...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.