Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java] Как корректно использовать wait и notify


Автор: rudvil 8.12.2011, 01:41
Всем привет.
Есть код который проверяет на появление новых *.pdf файлов в определенной папке, он выглядит примерно так.
Код

class DirectoryWatcher extends Thread {

    public void run() {
      try {
        final WatchService watchService = FileSystems.getDefault().newWatchService();
        final Path path = Paths.get("path\to\my\folder");
        path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
        while (true) {
          final WatchKey key = watchService.take();
          for (WatchEvent<?> watchEvent : key.pollEvents()) {
            final WatchEvent<Path> ev = (WatchEvent<Path>) watchEvent;
            final Path filename = ev.context();
            if (!filename.toString().endsWith(".pdf")) {
              continue;
            }
            for(int i = 0; i < N; ++i) {
                MyClass mc = new MyClass("path\to\my\folder" + "\\" + filename.toString());
                mc.start();
            }
          }
          boolean valid = key.reset();
          if (!valid) {
            break;
          }
        }
      } catch (Exception e) {
        jTextArea1.setText(jTextArea1.getText() + "\n" + e.toString());
      }
    }
  }


Также есть ещё 1 класс который используется в цикле.
Код

public class MyClass extends Thread {
    public void run() {
      ...
    }
}

он выполняет "тяжелые" действия...
Сейчас, весь цикл запускается как-бы сразу, т.е. одновременно запускаются все MyClass'ы не дожидаясь окончания выполнения каждого.
Пытался с помощью wait и notify, но все-равно как все разом все запускались так и осталось.
Как сделать так, чтобы они запускались по очереди?

Автор: rudvil 8.12.2011, 15:33
Пока-что смог найти след. решение, работает так как хотел.
Код

MyClass mc = new MyClass("path\to\my\folder" + "\\" + filename.toString());
mc.start();
mc.join();

Все ли я правильно делаю, не будет как говориться "undefined behavior"?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)