Je suis novice en Java et multithread. J'ai un problème suivant:Problèmes de programme récursifs/multithread
J'ai deux classes nommées Class A
et Class B
fonctionnant dans deux threads différents.
Class A
a la méthode onNewEvent()
. Une fois cette méthode appelée, elle demandera Class B
de faire un peu de travail. Dès que la classe B termine le travail, il appelle la méthode onJobDone()
définie également dans Class A
.
Maintenant, voici le problème: ce que je veux est de créer un nouveau travail dans la méthode onJobDone()
et de l'envoyer à Class B
.
Voici ce que je fais (pseudocode) dans la séquence d'exécution
A.onNewEvent(){
//create job
//ask B to do it
B.do()
}
B.do{
// Do some stuff
A.jobDone()
}
A.onJobDOne(){
B.do() //doItAgain
// print message "Thank you for doing it"
}
Le problème est que le message « Merci pour le faire » n'est jamais imprimé. En fait, lorsque la méthode onJobDone()
est invoquée, elle appelle B.do()
car B.do()
est très rapide. Il appelle immédiatement onJobDone()
, de sorte que le flux d'exécution ne parvient jamais à la partie PRINT MESSAGE du code.
Je suppose que c'est l'un des méchants problèmes multithreading.
Toute aide serait appréciée.
Ce problème n'est pas lié au multithreading, vous venez de faire un appel récursif infini. – kahoon
affiche le message avant le B.do() onJobDone() –
B.do() ne se termine jamais, une fois implicitement toujours appelé B.Do(). Vous devriez vous retrouver avec une exception stackoverflow quelque temps –