je suis arrivé cet exercice à la fac:Fils et compteurs partagés en java
Ecrire un programme qui déclare un compteur entier partagé et crée ensuite deux fils, l'un qui tente d'incrémenter le compteur 1000 fois et les autres tentatives de décrémenter le compteur 1000 fois. Lorsque chaque thread a fini de boucler, il devrait imprimer la valeur finale du compteur. (Indice: vous devrez définir une classe de compteurs, pourquoi?) Selon vous, quelle devrait être la sortie? Le programme a-t-il fonctionné comme prévu? Essayez d'exécuter le programme à plusieurs reprises pour voir si vous obtenez toujours le même résultat.
J'ai exécuté le programme en espérant que le résultat final soit zéro, mais il produit en réalité un nombre différent entre 0 et 1000 à chaque fois. Quelqu'un peut-il me dire pourquoi? Merci.
public class Counter
{
private int val;
public Counter()
{
val = 0;
}
public void increment()
{
val = val + 1;
}
public void decrement()
{
val = val - 1;
}
public int getVal()
{
return val;
}
}
public class IncThread extends Thread
{
private static final int MAX = 1000;
private Counter myCounter;
public IncThread(Counter c)
{
myCounter = c;
}
public void run()
{
for (int i = 0; i < MAX; i++)
{
myCounter.increment();
}
}
}
public class DecThread extends Thread
{
private static final int MAX = 1000;
private Counter myCounter;
public DecThread(Counter c)
{
myCounter = c;
}
public void run()
{
for (int i = 0; i < MAX; i++)
{
myCounter.decrement();
}
}
}
public class Main
{
public static void main(String[] args)
{
Counter c = new Counter();
Thread inc = new IncThread(c);
Thread dec = new DecThread(c);
inc.start();
dec.start();
System.out.println(c.getVal());
}
}
pense. C'est le but. – syrion
Code? Nous sommes supposés lire dans ton esprit? Ceci est un exemple classique de la façon de ne pas poser une question. –
s'il vous plaît mettre l'étiquette devoirs sur des questions sur les devoirs. En outre, il est beaucoup plus facile de vous aider avec votre code, si vous, nous savez, nous montrer le code :) – Affe