2012-01-03 84 views
0

我創建了一個包含GET方法的Restlet服務。當這個GET方法發生一個調用時,我希望請求等到我的一個布爾變量變爲true。 (我認爲計時器不是一個好的解決方案,因爲它是異步的)。任何可用的GWT功能?如何讓Web請求等待特定時間間隔?

+0

這是什麼邏輯變量?它從何而來?如果布爾變量在另一個GAE實例上比請求正在等待的實例變爲true會怎麼樣?該請求會在30秒後超時,您知道嗎?你知道GAE線程限制嗎?這個更普遍的目標是什麼? – 2012-01-03 11:42:14

+0

布爾變量來自靜態類。其實這是2個客戶之間簡單的溝通方式。另外Iam意識到那個時候。我只需要這個檢查10秒。如果這個變量仍然是錯誤的,我會認爲這是來自該客戶端的一個noresponse(離線)。 – Vivek 2012-01-03 12:12:09

+2

不好主意。不能保證每個用戶都獲得相同的實例。兩個客戶端之間的通信必須經過一些持久存儲。 – fdreger 2012-01-03 16:49:29

回答

1

如果你真的想這樣做,然後簡單地使訪問同步的布爾變量,並等待10秒:

private static boolean status; 

private final Object lock = new Object(); 

public void setStatus(boolean newStatus) { 
    synchronized(lock) { 
     this.status = newStatus; 
     if (this.status) { 
      lock.notifyAll(); 
     } 
    } 
} 

public boolean getTrueStatusOrBlock() throws InterrupedException { 
    synchronized(lock) { 
     if (status) { 
      return true; 
     } 
     lock.wait(10000L); 
     return status; 
    } 
} 
+0

這不起作用,因爲您不能確保不同的請求使用相同的實例。 – 2012-01-04 01:47:27

+0

我同意,並在我的第一個評論中警告OP。 – 2012-01-04 07:42:08

+0

雖然你的答案沒有這樣的免責聲明。我不確定我是否發佈了一個肯定無法解決的答案。 – 2012-01-04 21:33:57