当到达文件util的末尾时,是否有任何方法阻止读取在java中有新的数据写入文件

当到达文件util的末尾时,是否有任何方法阻止读取在java中有新的数据写入文件,java,file,Java,File,我有两个java进程,进程A将数据写入文件,进程B从文件中读取数据。有时进程A没有运行,进程B需要从文件中读取现有数据,所以我不能用套接字代替文件 问题是,当B到达文件末尾时,read函数立即返回,如果我在不使用sleep()的情况下重试,即使没有新数据,CPU使用率也是100%。如果我尝试使用sleep(),响应时间和性能都不好 是否有任何方法可以在到达文件末尾时阻止读取,直到有新数据写入文件,就像我在使用套接字一样?尝试使用java.nio包的WatchService API。在这种情况下,

我有两个java进程,进程A将数据写入文件,进程B从文件中读取数据。有时进程A没有运行,进程B需要从文件中读取现有数据,所以我不能用套接字代替文件

问题是,当B到达文件末尾时,read函数立即返回,如果我在不使用
sleep()
的情况下重试,即使没有新数据,CPU使用率也是100%。如果我尝试使用
sleep()
,响应时间和性能都不好


是否有任何方法可以在到达文件末尾时阻止读取,直到有新数据写入文件,就像我在使用套接字一样?

尝试使用java.nio包的WatchService API。在这种情况下,您可以为目录中的任何修改创建监视程序。不同的修改会有不同的事件,您可以根据这些事件触发读取。

尝试使用java.nio包的WatchService API。在这种情况下,您可以为目录中的任何修改创建监视程序。不同的修改会有不同的事件,您可以根据这些事件触发读取。

一个线程读取一个文件不会导致100%的CPU使用率,听起来您还有其他问题。但是,您可以使用更短的睡眠时间,这是响应速度和cpu使用之间的平衡,可能是100ms而不是1秒(1000ms)?这已经是一个糟糕的设计。您应该使用套接字或其他形式的IPC、数据库或JMS系统。一个线程读取一个文件不应该导致100%的CPU使用率,听起来您还有其他问题。但是,您可以使用更短的睡眠时间,这是响应速度和cpu使用之间的平衡,可能是100ms而不是1秒(1000ms)?这已经是一个糟糕的设计。您应该使用套接字或其他形式的IPC、数据库或JMS系统。