簡體   English   中英

在Java中的線程之間傳遞數據?

[英]Passing data between threads in Java?

我需要我的應用程序將數據提交到Web服務,並等待90秒以獲取響應。 但是,如果在60秒內沒有響應,我需要將用戶重定向到另一個頁面,並繼續等待響應30秒(如果響應出現),然后對其進行處理。 我知道我需要為此使用線程,但不確定在這種情況下如何集成踏步,以便線程可以在它們之間交換數據。

有任何想法嗎?? 我正在將JSF用於UI。

要求如下:Web服務將在90秒內發送響應(這是它的最大響應時間)。 但是會在60秒內為用戶提供響應(如果響應在60秒內不出現,則為虛擬響應)。 因此,即使用戶得到了虛擬響應(60秒后),我的應用程序也將繼續等待30秒以獲取響應

對JSF不太了解,但是聽起來您想要一個計時器,可能是java.util.Timer。 如果在計時器關閉之前答案又回來了,請關閉計時器。 如果計時器關閉,將其重置30秒鍾並重定向用戶。 下次它熄滅時,請放棄等待正確的答案。

您似乎已經了解了那么多。 但是這里至少有兩個交互線程。 如何溝通?

只需使用實例字段。 對它們的所有引用都應使用synchronized方法或塊中的代碼來完成。 這樣做,你應該沒事。 您必須弄清楚它,但是我想您會有一個int timerPhase ,它指示計時器在前60秒,接下來的30秒中未啟動或未超時。 也是布爾值answerReceived ,其中包含答案,可能還有其他一些答案。

(太多的同步會降低程序的速度。 我不認為您會遇到這個問題。但是,如果這樣做,請將同步塊分割開,除非每個字段都相互作用,否則每個字段都將分別同步。刪除同步並使用volatile關鍵字。請閱讀(請閱讀volatile關鍵字。)認真思考並行線程如何進行交互,並為事情變得怪異做准備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM