Future.get() 有没有可以在等待结果的时候不堵塞当前线程?

2019-05-28 18:31:55 +08:00
 aoscici2000

@RestController
public class TestController {

	@Resource(name = "taskExecutor")
	private ThreadPoolTaskExecutor executor;

	@GetMapping("/test")
	public Map<String, Object> test() throws Exception{
    
		Map<String, Object> map = new HashMap<>();

		DemoTask task = new DemoTask();
        
		Future<String> result = executor.submit(task);

		map.put("result", result.get());
        
		return map;
	}
}

class DemoTask implements Callable<String> {

	@Override
    public String call() throws Exception {
		Thread.sleep(5000);
		return "这是要的结果";
	}

}

如果两个人几乎同时访问 /test 的时候, 怎么样可以让这两个请求同时处理, 而不需要先等第一个处理完? 假设是需要等待返回结果的.

3351 次点击
所在节点    Java
22 条回复
aoscici2000
2019-05-30 16:56:46 +08:00
@godoway 图打不开, 跳转到其他页面了...
tomcat 这设置了的话, 除了 handler 那的线程 id 就是相同的, 但执行起来结果也是一样

server:
tomcat:
max-threads: 1

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(8);
executor.setMaxPoolSize(16);
aoscici2000
2019-05-31 23:02:34 +08:00
@godoway 晕死了, 好像是浏览器的大坑...一直以为就在 chrome 里打开两个标签刷一下就好了, 结果被人提醒用脚本测一下就完全 OK 了, 谢谢了哈, 打扰了那么就哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568499

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX