我需要我的应用程序将数据提交到Web服务并等待90秒才能获得响应。但是如果在60秒内没有响应,我需要将用户重定向到另一个页面并继续等待响应另外30秒,如果它来了则处理它。 我知道我需要使用线程,但不知道如何在这种情况下集成踏板,以便线程可以在它们之间交换数据。
任何想法?我正在使用JSF for UI。
要求如下:Web服务将在90秒内发送响应(这是它的最大响应时间)。但是用户将在60秒内得到响应(如果响应不在60秒内,则进行虚拟响应)。因此,即使用户已经给出了虚拟响应(60秒后),我的应用程序将继续等待另外30秒的响应
答案 0 :(得分:1)
对JSF不太了解,但听起来你想要一个计时器,可能是java.util.Timer。如果在计时器关闭之前回答,请关闭计时器。如果计时器熄灭,请将其重置30秒并重定向用户。下次它关闭,放弃等待正确的答案。
你似乎很明白。但是你在这里至少有两个交互线程线程。如何沟通?
只需使用实例字段即可。所有对它们的引用都应该使用synchronized
方法或块中的代码完成。那样做,你应该没事。你必须弄清楚,但我想你会有一个int timerPhase
,表示计时器没有启动,在前60秒,在接下来的30或超时。还有一个布尔answerReceived
,其中有答案,也许还有其他几个。
(太多同步可能会降低你的程序速度。我不认为你会遇到这个问题。但如果你这样做,请将同步块分开,每个字段单独同步,除非它们互动删除同步并使用volatile
关键字。阅读多线程。(阅读volatile
关键字。)认真思考并行线程如何交互。并准备好让事情变得非常奇怪。 )