Java 如何使用谷歌应用程序引擎';死亡线是否超出了预期?

Java 如何使用谷歌应用程序引擎';死亡线是否超出了预期?,java,multithreading,google-app-engine,Java,Multithreading,Google App Engine,我想采取的态度是,如果我的服务器端速度太慢,只需抛出一个异常并向客户端发送一条有意义的错误消息。我任意设置这个时间限制为5秒,并将根据需要调整它 我看到appengine有ApiProxy.getCurrentEnvironment().getRemainingMillis(),它给出了在抛出一个deadlineException并使我们超时之前剩下的毫秒数 我也想做一些类似的事情,但我自己的5秒限制要比GAE的60秒限制强(同样,现在我选择5秒还是40秒并不重要,只要它们比GAE的限制更严格)

我想采取的态度是,如果我的服务器端速度太慢,只需抛出一个异常并向客户端发送一条有意义的错误消息。我任意设置这个时间限制为5秒,并将根据需要调整它

我看到appengine有ApiProxy.getCurrentEnvironment().getRemainingMillis(),它给出了在抛出一个
deadlineException
并使我们超时之前剩下的毫秒数

我也想做一些类似的事情,但我自己的5秒限制要比GAE的60秒限制强(同样,现在我选择5秒还是40秒并不重要,只要它们比GAE的限制更严格)。我想编写一个启动5秒计时器的服务器端处理程序/servlet。如果请求在该时间段内未返回,则会引发异常并返回到客户端:

public class MyTimedServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException {
        // Start 5-second timer
        Timer timer = new Timer(5000);

        try {
            timer.start();
            response = handleRequest(request);
        }
        catch(TimeException timerException) {
            response = ResponseFactory.newTimeExceededResponse();
        }
    }
}
不幸的是,我在GAEAPI中没有看到任何类似于我正在寻找的
Timer
对象的东西

我已经计划通过
ThreadManager.currentRequestThreadFactory().newRequestThread(…)
使用多线程处理每个请求,所以我不想浪费其中一个线程(我一次只能得到10个!)来创建后台“计时器线程”,除非我必须这样做


所以我问:GAE有这样的开箱即用的东西吗?如果我必须自己动手,我该怎么做?提前谢谢

代码中的任何异步任务(不遵循正常流程)都涉及新线程的执行,在本例中,此任务用于计算时间。

但是,您可以使用appenginejre白名单中包含的类

示例代码:未测试只是一个指南

public class YourServlet extends HttpServlet {

    Timer timer;
    HttpServletResponse response;   

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)...{
        int seconds = 5;
        timer = new Timer();
        timer.schedule(new DeadLine(), seconds * 1000);     

        /* the rest of your code here */
    }

    class DeadLine extends TimerTask {
        public void run() {      
            response.getWriter().print("Error: deadline reached.");     
        }
      }
}

阅读本文了解更多信息。

谢谢@Marlon Jerez Isla(+1)-应用程序引擎前端实例一次只能生成10个线程。我假设这些
Timer
/
TimerTask
组合中的每一个都会占用1个可用线程?或者应用程序引擎没有根据10计算它们吗?是的,它计算,与每个计时器对象对应的多1个线程是一个后台线程,用于执行计时器的所有任务。