既然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()
每五秒一次。
该函数将从服务器获取一些结果,解析结果,然后根据结果执行它需要执行的活动/工作。
您可以在 java appengine 中创建线程。
ThreadManager.createThreadForCurrentRequest(new Runnable(){...});
See https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/ThreadManager https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/ThreadManager
当请求完成时,前端线程将被中断并终止,但生成的后端线程可以根据需要运行多久。另外,当你捕获 InterruptedException 时,尝试做更多的事情;接受此异常可能会导致实例保持在线状态,并且会花费您更多的钱。
如果你想让你的代码与 Runnable 和任务队列一起工作,只需实现 Runnable 和 DeferredTask 即可;两个接口具有相同的方法签名。要调度延迟任务,只需执行 QueueFactory.getQueue("queueName").add( TaskOptions.Builder.withPayload(YourDeferredTask));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)