2010-05-03 5 views
0

Думаю, я скучаю по некоторым базовым материалам, регатрируя потоки. Однако, здесь моя проблема:Jsystem: Thread.sleep() в паузах в тестовом режиме. Монитор

У меня есть монитор работает. С другой стороны, у меня есть тест. Тест выполняет запрос sql несколько раз, между каждым исполнением, ожидающим несколько ms с помощью Thread.sleep (xy).

for (int i = 0; (i < iterationsteps); i++) { 
    rs = myQuery.execute(); 
    //check if rs is empty 
    if (!rs.next()) { Thread.sleep(1000); 
    } 
} 

Теперь проблема заключается в том, что из-за этого Thread.sleep (1000), также монитор, кажется, спать (по крайней мере, он не проверяет). Я думал, что монитор - отдельная нить.

+0

Если для монитора «Монитор» имеется только один поток, он ничего не сделает, когда один поток будет спать. Есть ли более одного потока? –

ответ

0

Я не уверен, что вы нацеливаете на свой код, но одно можно сказать точно myQuery.execute() будет блокироваться до его завершения.

Если вы хотите сделать это в фоновом режиме, вы должны порождать отдельный поток для него:

new Thread() { 
     public void run() { 
      rs = myQuery.execute(); 
     } 
    }.start(); 

Однако это имеет много последствий. Некоторые из них очевидны, некоторые - нет, и для этого определенно потребуется некоторый код синхронизации.

Если вы не знаете, что делаете, я настоятельно рекомендую вам пойти с однопоточным подходом.

+0

Объяснение: Тест отправляет сообщение (например, txt-файл) в приложение, а затем проверяет обработку и если данные были добавлены в базу данных. Время обработки зависит от сообщения, и поэтому я регулярно проверяю таблицу на указанный макс. время (-> iterationsteps). Если после указанной даты нет данных в таблице, тест завершится неудачно, в противном случае произойдет. Монитор сам проверяет другую таблицу, и он должен предупредить или даже остановить тест, если эта таблица получит новую запись. – papanito

Смежные вопросы