Concurrency 如何实现异步响应?

Concurrency 如何实现异步响应?,concurrency,playframework,playframework-1.x,java.util.concurrent,Concurrency,Playframework,Playframework 1.x,Java.util.concurrent,我有一个控制器,它的方法阻止播放服务器线程,因为数据库查询非常慢。我需要以不阻塞线程的方式实现控制器方法。 我阅读了以下文件: 关于如何做到这一点,绝对没有任何例子。我发现唯一接近的就是这个 它只是将结果包装在wait()中 当我尝试这样做时,它不起作用 路线: GET/blog Controller.blog 控制器(这不是一个实际的慢速查询,但其他所有查询都是相同的): publicstaticvoidblog(){ String queryStr=“按createTime DESC从博客b

我有一个控制器,它的方法阻止播放服务器线程,因为数据库查询非常慢。我需要以不阻塞线程的方式实现控制器方法。 我阅读了以下文件:

关于如何做到这一点,绝对没有任何例子。我发现唯一接近的就是这个 它只是将结果包装在wait()中

当我尝试这样做时,它不起作用

路线:

GET/blog Controller.blog

控制器(这不是一个实际的慢速查询,但其他所有查询都是相同的):

publicstaticvoidblog(){
String queryStr=“按createTime DESC从博客b中选择b”;
JPAQuery q=Blog.find(queryStr);
列表bList=q.fetch(100);
List=newarraylist(bList.size());
对于(博客b:bList){
BlogDTO obj=新的BlogDTO(b);
列表。添加(obj);
}
伦德松(名单);
}
我尝试了
List bList=await(q.fetch(100))但这不起作用

我以前从未与未来和承诺合作过。
有人能给我一些关于如何实现这一点的建议吗?

因为JDBC使用阻塞IO,任何缓慢的数据库查询都会阻塞线程。
唯一的方法似乎是为此目的使用Job。

对我来说,最好的方法是使用返回列表对象的Job。然后在控制器中,您可以等待作业终止:

public static void blog() {
    List<BlogDTO> list = await(new BlogPostJob().now());
    renderJSON(list);
}
publicstaticvoidblog(){
List List=wait(new BlogPostJob().now());
伦德松(名单);
}
你把你的jpa代码放在你的工作中

当你说“那不行”时,你能详细说明你面临的问题吗?