首页
学习
活动
专区
圈层
工具
发布

多线程&
EN

Stack Overflow用户
提问于 2013-02-03 19:28:51
回答 1查看 2.9K关注 0票数 3

在Google (GAE)上,前端实例可以创建多达10个线程,以最大限度地提高吞吐量。根据此页,这样的多线程可以实现如下:

代码语言:javascript
复制
Runnable myTask = new Runnable({
    @Override
    public void run() {
        // Do whatever
    }
});

ThreadFactory threadFactory = ThreadManager.currentRequestThreadFactory();

// GAE caps frontend instances to 10 worker threads per instance.
threadFactory.newRequestThread(myTask);

为了访问我的GAE服务器端,我将公开许多映射到特定URL的servlet,例如映射到http://myapp.com/fizzhttp://myapp.com/fizz

代码语言:javascript
复制
public class FizzServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        // Handle the request here. Somehow send it to an available
        // worker thread.
    }
}

--我想我很想知道如何将这两种想法联系起来。据我所见,这里有3种不同的机制/项目:

  1. App实例本身,当GAE触发实例时,它的生命周期可以通过实现ServletContextListener并运行自定义代码来“挂钩”;
  2. 这个ThreadFactory/ThreadManager的东西(上面)
  3. servlets/侦听器

我想我想知道如何实现代码,以便每当一个新请求进入FizzServlet#doGet时,如何确保该请求被发送到可用线程(如果有可用线程的话)。这样,如果FizzServlet是我所公开的唯一一个servlet,它可能会被调用多达10次,然后才会导致一个新的(第11个)传入请求在处理前一个请求时挂起。

我正在寻找servlet和这个线程创建代码之间的胶水代码。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-03 19:58:45

我想我想知道如何实现代码,以便每当一个新请求进入FizzServlet#doGet时,如何确保该请求被发送到可用线程(如果有可用线程的话)。这样,如果FizzServlet是我所公开的唯一一个servlet,它可能会被调用多达10次,然后才会导致一个新的(第11个)传入请求在处理前一个请求时挂起。

这就是GAE servlet引擎为您所做的。您部署了一个包含servlet的应用程序,当请求传入时,servlet引擎使用线程来处理请求并调用servlet。你没什么可做的。

如果您的servlet的doGet()doPost()方法(由GAE调用)需要并行执行多个任务(例如,联系其他几个网站),那么您将按照链接到的页面中所解释的那样自行启动线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14676353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档