Я думаю, вы должны создать только один наблюдатели услугу, но зарегистрировать [м] любые пути к нему.
В соответствии с примером, представленным документами Oracle (https://docs.oracle.com/javase/tutorial/essential/io/walk.html), в качестве переменной-члена класса WatchDir создается только одна служба часов. Обратите внимание, что «this.watcher»
public class WatchDir {
private final WatchService watcher;
в другом месте в классе ...
/**
* Creates a WatchService and registers the given directory
*/
WatchDir(Path dir, boolean recursive) throws IOException {
this.watcher = FileSystems.getDefault().newWatchService();
Тот же сервис используется для регистрации всех путей внутри данной папки рекурсивно.
Наконец, регистрация здесь происходит ...
/**
* Register the given directory with the WatchService
*/
private void register(Path dir) throws IOException {
WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
Хотя я не пробовал для часов услуг, вы можете получить только так много дескрипторов файлов одновременно. Сколько вы ошибались? Также имейте в виду, что служба просмотра выполняет опрос файловой системы, поэтому в какой-то момент вы даете вашей системе много работы с IO. –