現在,我有一段代碼聯繫另一個服務器,詢問某個項目是否在列表中,並根據返回的值返回布爾值。在Java內返回之前等待
的代碼都像這樣:
public boolean checkIfOnline(int accountId) {
//First loop is incase if someone is already checking. Second is for the checking that this account is doing.
while (isCheckingIfOnline) {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
isCheckingIfOnline = true;
sendCheckIfOnline(accountId);
while (isCheckingIfOnline) {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
return onlineResponse;
}
的onlineResponse和isCheckingIfOnline是處理其他的什麼服務器返回的方法中改變,這是我扔在一起讓系統等待的方法另一臺服務器進行響應。顯然,這是非常有缺陷的,因爲當這個方法經常被調用時,它會減慢系統,因爲它一次只允許一個查詢,當它允許多個查詢同時執行時。
我可以使用什麼其他方法來實現上述代碼的功能,但允許多個查詢同時運行?
編輯:爲了進一步說明,checkIfOnline獲取一個帳戶ID,並詢問另一個服務器是否該帳戶ID位於列表中,如果帳戶ID是或不在列表中,則該其他服務器對當前服務器作出響應。
我想你想使用一個ExecutionService並提交「checkIfOnline」任務到它。它負責調度和等待,然後您可以配置適合您的應用程序的併發級別。 – Thilo 2012-08-09 04:54:22
如果沒有sendCheckIfOnline正在做什麼的更多細節,很難提供建議。 – Tom 2012-08-09 04:59:18
超前,澄清更多的湯姆。 – PuppyKevin 2012-08-09 05:18:52