Java 线程池执行器未在GAE中执行线程

Java 线程池执行器未在GAE中执行线程,java,google-app-engine,threadpoolexecutor,gae-backends,Java,Google App Engine,Threadpoolexecutor,Gae Backends,我试图在谷歌应用程序引擎中使用executor框架。下面是我试图运行的代码 Thread thread = ThreadManager.createBackgroundThread(new Runnable(){ public void run(){ try{ LOGGER.info( "Checking background thread");

我试图在谷歌应用程序引擎中使用executor框架。下面是我试图运行的代码

Thread thread = ThreadManager.createBackgroundThread(new Runnable(){
            public void run(){
                          try{
                                  LOGGER.info( "Checking background thread");                            
                                  Thread.sleep(10);
                              }
                          catch (InterruptedException ex){
                                           throw new RuntimeException("Exception:", ex);
                              }
                         }
                    });
ScheduledThreadPoolExecutor executor = (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(10, ThreadManager.backgroundThreadFactory());
executor.scheduleAtFixedRate(thread, 0, 30, TimeUnit.MINUTES);
但这并没有启动线程。但是如果我使用thread.start(),它会正常工作。我已经检查过了,它确实提供了Executor类。那么我哪里做错了

Saikat

你应该尽量避免在AppEngine上创建线程,因为它是分布式的和动态的,它往往会产生非常糟糕/意外的结果

在您的情况下,多个实例将产生多个(本地)线程,多次发送相同的通知。另外,请记住GAE前端实例有一个1分钟的请求限制,因此在此时间之后,服务器将终止该请求

幸运的是,appengine为这种情况提供了最新的解决方案

Cron服务将允许您安排作业在给定时间或每个给定时间段运行。当cron被触发时,GAE将调用一个配置好的URL,这样您就可以执行您的流程,在您的情况下,发送通知

例:(从提供的链接)


/周报
寄出周报
每周一08:30
美国/纽约

将在每周一@8:30向/weeklyreport发出HTTP请求。

我会看一看,但一般来说,您应该避免通过AppEngine上的线程创建自己的后台任务。您试图解决的问题中有哪些是推送队列无法解决的?如果你必须使用“做你正在做的事情”,那么最好使用GCE。但是你问题的细节仍然有效,所以我也很好奇。@BIllPrin我正试图在某个时间使用调度程序向用户发送通知。这就是为什么我使用executor运行ifinite线程来检查并向用户发送通知。在appengine的javadoc中,据说我们可以在appengine中使用executor。这就是我试图实现它的原因。当我有机会的时候,我会看一看,如果你是对的,请提交一个bug,很抱歉延迟。
 <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>