L'impression de pair et de l'Impair à l'aide de deux Threads en Java

J'ai essayé le code ci-dessous. J'ai pris ce morceau de code à partir d'un autre poste qui est correct comme par l'auteur. Mais quand j'ai essayer de l'exécuter, il ne me donne pas le résultat exact.

C'est principalement pour imprimer des pairs et impairs, les valeurs dans l'ordre.

public class PrintEvenOddTester {
public static void main(String ... args){
Printer print = new Printer(false);
Thread t1 = new Thread(new TaskEvenOdd(print));
Thread t2 = new Thread(new TaskEvenOdd(print));
t1.start();
t2.start();
}
}
class TaskEvenOdd implements Runnable {
int number=1;
Printer print;
TaskEvenOdd(Printer print){
this.print = print;
}
@Override
public void run() {
System.out.println("Run method");
while(number<10){
if(number%2 == 0){
System.out.println("Number is :"+ number);
print.printEven(number);
number+=2;
}
else {
System.out.println("Number is :"+ number);
print.printOdd(number);
number+=2;
}
}
}
}
class Printer {
boolean isOdd;
Printer(boolean isOdd){
this.isOdd = isOdd;
}
synchronized void printEven(int number) {
while(isOdd){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Even:"+number);
isOdd = true;
notifyAll();
}
synchronized void printOdd(int number) {
while(!isOdd){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Odd:"+number);
isOdd = false;
notifyAll();
}
}

Quelqu'un peut-il m'aider à résoudre cela?

MODIFIER
Résultat attendu:
Odd:1
Même:2
Impair:3
Même:4
Odd:5
Même:6
Odd:7
Même:8
Odd:9

Qu'est-ce que le résultat réel et qu'est-ce que le résultat escompté?
numéro commence à 1, et on l'incrémente par 2. Par conséquent, il ne sera jamais même.
Ce n'est pas un service de débogage...
Pour chaque étudiant qui vient ici: parlez-en à votre professeur que bien que cet exercice pourrait vous apprendre quelque chose à propos de comment de contrôle des threads, c'est vraiment horrible exemple de pourquoi d'utiliser des threads. Si vous voulez un programme pour faire certaines choses (par exemple, écrire les nombres) dans un certain ordre (par ex., 1, 2, 3, ...); puis absolument façon de le faire est de faire des choses dans un seul thread. Chaque programme multi-threadé exige synchronisation entre les threads, mais la synchronisation plus vous l'utilisez, le moins d'avantages que vous obtenez de filetage. Ce programme est un négative avantage.
Il n'y a aucune raison pourquoi les fils doivent écrire les nombres en alternance, même en laissant de côté l'erreur à propos de l'incrément. Vos attentes sont égarés, comme c'est le uncited 'un autre morceau de code". Ce n'est pas un service de validation arbitraire indésirable d'Internet.

OriginalL'auteur Suvasis | 2013-05-22