正如在documentation中所提到的,我在后台运行一个后台线程,无限次地使用1个实例进行一些连续的后台处理。在google appengine后台运行只有一个后台线程
import com.google.appengine.api.ThreadManager;
import java.util.concurrent.AtomicLong;
AtomicLong counter = new AtomicLong();
Thread thread = ThreadManager.createBackgroundThread(new Runnable() {
public void run() {
try {
while (true) {
counter.doStuff()
Thread.sleep(10);
}
} catch (InterruptedException ex) {
throw new RuntimeException("Interrupted in loop:", ex);
}
}
});
thread.start();
我已将此代码绑定到_ah/start端点,以便在实例启动后执行它。然而,当在本地服务器上运行时,我发现_ah/start请求在运行时会多次出现,并启动多个此类线程。我一次只需要一个线程来减少后台处理中的争用。
有什么办法抓住现有的bg线程并检查它的运行是否可以避免新的线程创建?
更新 上传这个代码到云后,我还观察到,每次_ah /启动是在后台调用它产生一个新的线程为_ah /背景端点的一部分,并保持运行。以这种方式,如果我们不能阻止较早的线程,那么会有很多线程一起运行。
一种方法在类成员变量中标记时间,并在尝试创建第二个线程时检查它是否是最近的。 – SoulMan 2014-11-03 11:45:18