ThreadPool执行器未执行GAE中的线程



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

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,

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

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

幸运的是,App Engine正是为这种情况提供了Cron服务。

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

例如:(从提供的链接)

 <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>

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

最新更新