我正在寻找一种方法来 hibernate 线程,直到在Java 1.8中修改文件(如触摸和/或更改文件)为止。基本上,该线程必须读取文件的内容,对任何更改发出警报,但不能仅吸收读取,等待,再次读取,等待等的内核。

理想情况下,线程将以与并发阻塞队列使线程进入休眠状态相同的方式阻塞,直到从队列中删除某些内容为止。

有任何想法吗?

最佳答案

您可以使用NIO WatchService :



要使用它,您需要:

// 1 create the watchService
WatchService watchService =    FileSystems.getDefault().newWatchService();

// 2 get a reference to the directory to be watched for changes
String watchedDir = "/mydir";
Path dir = Paths.get(watchedDir);

// 3 register on the events you need to watch
WatchKey watchKey = dir.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);

...

// 4 wait for changes, generally inside a loop
watchKey = watchService.take();

方法take在可用时返回一个监视键,否则等待。

09-04 15:24