Создание потока для синхронизации и перезапуска другого потока - PullRequest
2 голосов
/ 10 августа 2010

Я реализовал следующий класс, который отслеживает время, необходимое для выполнения алгоритма

public class MyTimer extends Thread{

    long timeElapsed = 0;

    public MyTimer(String parameters){
        //initilise staff
    }

    pubic void run(){
      long startTime = System.currentTimeMillis();

      //DO SOME THINGS THAT TAKE TIME

      timeElapsed = System.currentTimeMillis() - startTime;
      System.out.println("time elapsed = " + timeElapsed");

    }
}

Иногда MyTimer занимает действительно много времени, поэтому я хотел бы создать другой класс дляКонтролируй это.Если MyTimer не закончил в течение 30 секунд, то я хотел бы остановить поток и перезапустить его с новыми параметрами.если это заканчивается менее чем за 30 секунд, то я хотел бы иметь возможность сохранить timeElapsed и перезапустить MyTimer снова.Я думал, что это было бы просто, но я испортил пулы потоков timeCountLathces и исключения монитора ..... Итак, есть ли способ, которым я могу это сделать?Альтернативное решение - запустить мои 500 тестов один за другим вручную ...

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Вероятно, проблема, которая делает вашу жизнь труднее, состоит в том, что вы должны решить, как вы собираетесь прервать свой долго работающий кусок кода?Если он в цикле, который сам по себе довольно короткий (то есть часто повторяется), то вы можете выполнить проверку в цикле, чтобы решить, останавливаться или продолжать идти.Это было бы идеально.Однако, если долго выполняющаяся задача отправляется в базу данных или один оператор Java выполняется целую вечность, вам придется попробовать interrupting поток (например, monitoredThread.interrupt()).Прерывание работающего потока может привести к регистрации ошибок и т. Д., Но если код хорошо себя ведет, прерывание заставит его перестать делать то, что он делает, и вернуться.

Надеюсь, это поможет.

0 голосов
/ 10 августа 2010

Вам следует рассмотреть возможность запуска ваших тестов / сборки с Hudson.Вы можете настроить свою сборку Hudson (ваши 500 тестов) на автоматическое отключение по истечении заданного периода времени.

Конечно, вы не получаете сбой на тестовой основе, так как каждому тесту не будут предоставляться произвольные 30 секунд, но вы будете использовать Непрерывную интеграцию, что является правильным шагомнаправление.

Загрузка и настройка Hudson занимает около 5 минут: http://hudson -ci.org /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...