你將如何去實現等待,直到在Java中完成方法調用爲止?在java中執行同步網絡調用等待ack消息?
基本上我想要做的是hava一種方法,它通過網絡將消息發送到服務器應用程序,並等待它從服務器獲取相應的Ack消息,但操作已成功完成或操作失敗,並顯示錯誤消息。
我已經有一個非阻塞版本的我的方法,它傳遞一個回調類,其中有一個方法在回調中被調用。
構建一個回調類將它傳遞給我以前的方法,然後執行一個等待操作,並在回調中有該類做一個通知是否有意義?
你將如何去實現等待,直到在Java中完成方法調用爲止?在java中執行同步網絡調用等待ack消息?
基本上我想要做的是hava一種方法,它通過網絡將消息發送到服務器應用程序,並等待它從服務器獲取相應的Ack消息,但操作已成功完成或操作失敗,並顯示錯誤消息。
我已經有一個非阻塞版本的我的方法,它傳遞一個回調類,其中有一個方法在回調中被調用。
構建一個回調類將它傳遞給我以前的方法,然後執行一個等待操作,並在回調中有該類做一個通知是否有意義?
簡答:是的。我很喜歡使用類庫中的內容,您所描述的內容聽起來很像Observer模式,假設您使用的是J2SE,那麼您已經擁有Observer/Observable接口。
編輯︰我的咖啡有什麼問題:)顯然,我的意思是檢查什麼是java.util.concurrent包,特別是未來<>和ExecutorService類。
將.wait()添加到您的回調類將是最簡單的路徑。它可以坐在那裏旋轉一些標誌,直到你的回調切換它,只要確保在你的循環中包含Thread.yield()或.sleep()。
保存必須重寫另一個阻塞通信通道。
如果您不使用JMS,請忽略。
如果您使用的是JMS,那麼您可以使用QueueRequestor,這是Request Reply integration pattern的實現。
也就是說,下面的電話出現同步到客戶端,即使使用異步消息:
QueueRequestor requestor = null;
try {
requestor = new QueueRequestor(session, queue);
Message response = requestor.send(request);
} finally {
if (requestor == null) {
try {
requestor.close();
} catch (JMSException e) {
// log error message
}
}
}
是,使用現有的方法,就像你所提出的建議。在同步方法調用中創建回調,該方法將通過wait()/ notify()與同步方法調用進行協調。同步方法將調用異步,然後wait()。當回調被調用時,它會調用notify()來喚醒同步方法,以便返回結果。
如果你使用wait(),你爲什麼要旋轉一個標誌?使用wait()意味着你不需要那樣做,或者yield()或sleep()。 – Robin 2009-05-20 13:11:53
我想實現自己的.wait(),但是是Object.wait()是另一種可能性,或者可能Callback.wait(),然後回調可以調用this.notifyAll() – Cogsy 2009-05-20 13:32:13