正如在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