Principe de synchronisation avec synchronized
Bonjour tous le monde,
j'avoue ne pas bien comprendre le fonctionnement de la synchronisation multi-thread, j'ai beau lire les explications sur le net mais plus j'en lie plus je m'embrouille la tête et moins je comprend.
Bref j'ai quelques questions à vous poser :
J'ai cru comprendre que l'on pouvait ce synchroniser directement sur une variable objet comme String, Integer, etc...
Ce bout de code est-il correcte car apparemment pour manipuler une variable static il faut ce synchroniser sur un this.getClass() et je ne comprend pas pourquoi (une object static est pourtant identique quelque soit la classe qui l'utilise, non ?).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
public class maclasse {
private static Integer mavariableA = 0;
private static Integer mavariableB = 0;
public static void addA() {
synchronized(mavariableA) {
mavariableA++;
}
}
public static void dellA() {
synchronized(mavariableA) {
mavariableA--;
}
}
public static Integer getA() {
synchronized(mavariableA) {
return mavariableA;
}
}
public static void addB() {
synchronized(mavariableB) {
mavariableB++;
}
}
public static void dellB() {
synchronized(mavariableB) {
mavariableB--;
}
}
public static Integer getB() {
synchronized(mavariableB) {
return mavariableB;
}
}
} |
J'ai lu aussi qu'il ne fallait pas synchroniser sur un Boolean, mais Boolean est un objet non ?
Bref j'y pige pas grand chose :?
Merci d'avance pour votre aide :ccool: