GET(服务器端)可以进行多线程处理

时间:2012-04-29 22:24:15

标签: java multithreading google-app-engine gwt

我正在开发一个系统,服务器需要将(每秒)值发送到多个客户端。我的想法是为每个客户端实现一个Thread来执行此操作。我用以下方式实现了Threads:

Runnable tu = new TimeUpdater(market_id);
Thread thread = ThreadManager.createBackgroundThread(tu);
thread.start(); 

public class TimeUpdater implements Runnable{
boolean close = false;
..
   public void run() {
      while(!close){

      try {
        //do something    
        Thread.sleep(1000);
      }catch (InterruptedException e) {
       }

      }
   }
}

要暂停线程,我只需使用:

thread.interrupt();
thread = null;

但我无法使线程暂停/恢复工作。 有没有人有更好的想法在服务器上使用GWT多线程?

错误地编辑了原帖。 - 马丁

2 个答案:

答案 0 :(得分:1)

我很遗憾地说,但我相信google-app-engine不允许多线程。例如,请参阅here

答案 1 :(得分:0)

首先,后台线程要求这些进程在后端运行。为此,您必须将任务发送到后端,您将在其中处于正在运行的任务中,因此添加线程只会使您的应用程序延迟更多。您实际上不需要线程来分派消息;后端请求持续10分钟。此外,您的线程将在他们自己的请求中运行;您可以在静态ram中存储线程列表以便能够访问它们,但更好的解决方案是在消息进入时分发消息,而不是将实例保持在线和休眠状态。如果您的客户端每秒向服务器发送消息,则该rpc可以只是密钥查询需要通知的其他用户,并立即发送消息。如果您使用异步数据存储过程,它将非常快。此外,如果要减少请求时间,可以让rpc启动消息发送,然后让servlet返回响应,然后在回复已经断线后完成异步请求。

我使用ThreadLocal地图和清理过滤器进行这样的后处理。 Servlet将作业发布到可运行列表,清理过滤器运行作业。只要您立即启动异步请求,它们通常在清理过滤器到达它们时完成。

https://developers.google.com/appengine/docs/java/datastore/async