在Java中在线程之间传递数据?

在Java中在线程之间传递数据?,java,multithreading,Java,Multithreading,我需要我的应用程序将数据提交到web服务,并等待90秒以获得响应。但是如果在60秒内没有响应,我需要将用户重定向到另一个页面,并继续等待响应30秒(如果有),然后处理它。 我知道我需要使用线程来实现这一点,但不确定在这种情况下如何集成踏板,以便线程之间可以交换数据 有什么想法吗??我将JSF用于UI 要求如下:web服务将在90秒内发送响应(这是它的最大响应时间)。但用户将在60秒内得到响应(如果响应不在60秒内,则为虚拟响应)。因此,即使用户得到了一个虚拟响应(60秒后),我的应用程序也会继续

我需要我的应用程序将数据提交到web服务,并等待90秒以获得响应。但是如果在60秒内没有响应,我需要将用户重定向到另一个页面,并继续等待响应30秒(如果有),然后处理它。 我知道我需要使用线程来实现这一点,但不确定在这种情况下如何集成踏板,以便线程之间可以交换数据

有什么想法吗??我将JSF用于UI


要求如下:web服务将在90秒内发送响应(这是它的最大响应时间)。但用户将在60秒内得到响应(如果响应不在60秒内,则为虚拟响应)。因此,即使用户得到了一个虚拟响应(60秒后),我的应用程序也会继续等待30秒,等待响应。我对JSF知之甚少,但听起来您需要一个计时器,可能是java.util.timer。如果答案在计时器关闭前返回,请关闭计时器。如果计时器熄灭,请将其重置30秒并重定向用户。下次它响的时候,放弃等待正确的答案

你似乎明白了很多。但这里至少有两个交互线程。如何沟通

只需使用实例字段。所有对它们的引用都应该使用
同步的
方法或块中的代码来完成。那样做你就会没事了。你必须弄清楚,但我想你会有一个int
timerpase
,它会指示计时器在前60秒、后30秒内没有启动,或者超时。还有一个布尔
应答收到了
,里面有答案的东西,也许还有一些其他的


(太多的同步会降低程序的速度。我不认为您会有这个问题。但是如果您有,请将同步块拆分,每个字段单独同步,除非它们相互作用。删除同步并使用
volatile
关键字。阅读多线程。(仔细阅读
volatile
关键字。)认真思考并行线程如何交互。并做好准备,让事情变得非常奇怪。)

对JSF了解不多,但听起来你需要一个计时器,可能是java.util.timer。如果在计时器关闭前返回答案,请关闭计时器。如果计时器关闭,请重置30秒并重定向用户。下次计时器关闭时,请放弃等待正确答案

你似乎明白这一点。但这里至少有两个交互线程。如何通信

只需使用实例字段。对它们的所有引用都应该使用
synchronized
方法或块中的代码来完成。这样做应该会很好。你必须弄清楚,但我可以想象你会有一个int
timerPhase
,这将表明计时器在前60秒、后30秒内没有启动,或者没有计时此外,还收到了一个布尔
应答
,里面有答案的东西,也许还有其他一些


(太多的同步会降低程序的速度。我不认为您会有这个问题。但是如果您有,请将同步块拆分,每个字段单独同步,除非它们相互作用。删除同步并使用
volatile
关键字。阅读多线程。(阅读
volatile
关键字。)认真思考并行线程如何交互。并准备好让事情变得非常奇怪。)

“需要将用户重定向到其他页面并继续等待响应”-这意味着什么?您的java应用程序可能会被重定向(因此java应用程序是客户端),或者通过浏览器进行一些通信?请澄清,您可能应该避免在容器管理的应用程序中使用线程,因为线程管理通常由容器执行。我不太理解这里的用例:等待60秒,然后重定向(为什么?为了用户反馈?),再等待30秒(然后呢?)。您能详细说明一下吗?要求如下:web服务将在90秒内发送响应(这是它的最大响应时间)。但用户将在60秒内得到响应(如果响应不在60秒内,则为虚拟响应)。因此,即使用户得到了虚拟响应(在60秒内)我的应用程序将继续等待30秒,等待响应。“需要将用户重定向到其他页面并继续等待响应”-这是什么意思?您的java应用程序可能会被重定向(因此java应用程序是客户端),或者通过浏览器进行一些通信?请澄清,您可能应该避免在容器管理的应用程序中使用线程,因为线程管理通常由容器执行。我不太理解这里的用例:等待60秒,然后重定向(为什么?为了用户反馈?),再等待30秒(然后呢?)。您能详细说明一下吗?要求如下:web服务将在90秒内发送响应(这是它的最大响应时间)。但用户将在60秒内得到响应(如果响应不在60秒内,则为虚拟响应)。因此,即使用户得到了虚拟响应(在60秒内)我的应用程序将继续等待30秒,等待响应。