java - 使用 Appengine 进行多线程

标签 java google-app-engine

既然Appengine不允许java多线程,那么我们如何将现有的多线程代码迁移到平台上呢?

例如我有以下代码:

    Thread t = new Thread() {
        public boolean alive = true;
        public void run() {
            while (alive) {
                try {
                    Thread.sleep(5000);    
                    getNewNotifications();
                } catch (InterruptedException e) {
                    //  Do nothing
                } catch (IOException e) {
                } 
            }
        }
    };
    t.start()

函数 getNewNotification() 执行一些 Rest/HTTP 调用,其中可能包括一些可能无限期返回的其他进程。我读过 Task Queue 是解决方案,但是我们如何将这个简单的代码转换为 App 引擎友好的代码?

上面的代码是如何使用任务队列实现的?例如,每五秒调用一次 getNewNotifications()

并且该函数将从服务器获取一些结果,解析结果,然后根据结果执行它需要做的 Activity/工作。

最佳答案

您可以在 java appengine 中创建线程。

ThreadManager.createThreadForCurrentRequest(new Runnable(){...});

参见 https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/ThreadManager

当请求完成时,前端线程将被中断并终止,但生成的后端线程可以运行任意长的时间。此外,当您捕获 InterruptedException 时,尽量多做一些事情;吞下这个异常可能会导致实例保持在线,并且会花费你更多的钱。

如果你想让你的代码与 Runnable 和任务队列一起工作,只需同时实现 Runnable 和 DeferredTask;两个接口(interface)都具有相同的方法签名。要分派(dispatch)延迟任务,只需执行 QueueFactory.getQueue("queueName").add( TaskOptions.Builder.withPayload(YourDeferredTask));

关于java - 使用 Appengine 进行多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373469/

相关文章:

java - 对管理员隐藏私钥等

java - 让 Swing 刷新 JLabel 时遇到问题(显然在事件调度线程上)

java - 通过 ssh 复制 jar 文件时 java eclipse maven (和 ant) 的问题

python - Google 应用引擎 suas cookie 未过期

java - 在运行时创建复合比较器以进行排序

java - 我的重绘函数没有调用我的paintComponent

java - 是否可以从元数据_property_解码属性类

node.js - 具有 OR 条件的 Google Datastore 过滤器

python - 如何循环直方图来获取图片的颜色?

google-app-engine - Google Cloud Datastore Go Client默认不会关闭连接吗?