2010-05-03 5 views
0

Je suppose que certains éléments de base m'échappent, c'est-à-dire regadring. Cependant, voici mon problème:Jsystem: Thread.sleep() dans le test du test de temps de pause Moniteur

J'ai un moniteur en cours d'exécution. D'un autre côté, j'ai un test. Le test exécute une requête sql plusieurs fois, entre chaque exécution en attente de ms avec Thread.sleep (xy).

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

Maintenant, le problème est qu'en raison de cette Thread.sleep (1000) aussi le moniteur semble dormir (au moins il ne vérifie pas). Je pensais qu'un moniteur est un fil séparé.

+0

S'il n'y a qu'un seul thread à surveiller pour le 'Monitor', il ne fera rien quand le thread unique est en veille. Y a-t-il plus d'un fil? –

Répondre

0

Je ne suis pas sûr de ce que vous visez avec votre code, mais une chose est sûre que myQuery.execute() bloquera jusqu'à ce qu'il soit terminé.

Si vous voulez le faire en arrière-plan, vous devez frayer un thread séparé pour elle:

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

Cependant, cela a de nombreuses implications. Certains sont évidents, d'autres ne le sont pas, et cela nécessiterait certainement du code de synchronisation. À moins que vous ne sachiez ce que vous faites, je vous encourage fortement à adopter une approche monothread.

+0

Explication: Le test envoie un message (par exemple, un fichier txt) à l'application, puis vérifie le traitement et si des données ont été ajoutées à la base de données. Le temps de traitement dépend du message et donc je vérifie régulièrement la table pour un maximum spécifié. temps (-> itérations). S'il n'y a pas de données dans la table après l'heure spécifiée, le test échouera, sinon il se poursuivra. Le moniteur lui-même vérifie une autre table et il doit avertir ou même arrêter le test, si cette table reçoit une nouvelle entrée. – papanito