通过AJAX与多个线程实时交换数据

问题描述

| 我正在用JSF 2.0开发应用程序,我希望有一个多行文本框来显示正在从文件中实时读取(逐行)的输出数据。 因此,目标是要有一个带有按钮的页面,该页面将触发后端开始从文件读取,然后在文本框中显示读取结果。 我曾考虑过通过以下方式进行此操作: 让本地页面跟踪到目前为止已在文本框中检索/显示的行。 本地页面会定期使用AJAX轮询后端,并请求已读取的任何新数据(告诉它到目前为止页面的行数,此后才检索新行)。 这将继续直到完全检索了整个文件。 问题是从文件读取的bean方法正在运行while循环,该循环会阻塞。因此,要同时读取要写入的数据结构,将需要使用其他线程,对吗?我听说在Web应用程序中生成新线程是潜在的危险动作,应该使用线程池,等等。 谁能对此有所了解? 更新:我没有运气就尝试了几种不同的方法。但是我确实设法通过产生一个单独的ѭ0来运行我的阻塞循环,而每当处理AJAX请求时,都可以使用主线程从中读取数据来使其工作。我是否可以使用一个不错的库来做类似的事情,让JSF对该生命值“ 0”进行一些生命周期控制?     

解决方法

        您是否考虑过实现Future接口(包含在Java5 + Concurrency API中)?基本上,当您阅读文件时,可以将其分为多个部分,并只需为每个部分创建一个新的Future对象。然后,一旦计算完成,就可以让对象返回。 这样,您可以避免在仍由循环操作的结构中访问该结构,并且还可以将操作拆分为较小的计算,从而减少了发生锁定的时间(总锁定时间可能更长,但是您对其他区域的响应更快) 。如果您维持创建Future对象的顺序,则无需跟踪行号。请注意,调用Future.get()确实会阻塞,直到对象为“就绪”为止。 其余的方法将是相似的-进行Ajax调用以从FIFO队列中获取所有“就绪” Future对象的内容。 我想我了解您要完成的目标。也许更多的信息会有所帮助。