Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Java] Как корректно использовать wait и notify 
:(
    Опции темы
rudvil
Дата 8.12.2011, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Всем привет.
Есть код который проверяет на появление новых *.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, но все-равно как все разом все запускались так и осталось.
Как сделать так, чтобы они запускались по очереди?
--------------------
xor
PM MAIL Skype   Вверх
rudvil
Дата 8.12.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Пока-что смог найти след. решение, работает так как хотел.
Код

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

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

--------------------
xor
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.