Was Sie beim Schreiben von threadsicherem Code beachten sollten:
1. Gemeinsame Variablen
2. Veränderliche Variablen
„Geteilt“ bedeutet, dass mehrere Threads gleichzeitig darauf zugreifen können, und „veränderlich“ bedeutet, dass sich sein Wert während seines Lebenszyklus ändern kann.
Zum Beispiel die folgende Zählvariable:
Kopieren Sie den Codecode wie folgt:
//Thread-unsichere Klasse
öffentliche Klasse UnsafeCount {
private int count = 0; //Diese Variable wird gemeinsam genutzt
public void raise() { //Hier gibt es keinen Synchronisationsmechanismus, mehrere Threads können gleichzeitig darauf zugreifen
count++; //Diese Variable ist variabel
}
public int getCount() {
Rückgabeanzahl;
}
}
Es gibt 4 Möglichkeiten, dieses Problem zu beheben:
1. Anstatt die Statusvariable zwischen Threads zu teilen, können Sie die Variable in eine Methode kapseln (zustandslose Objekte müssen Thread-sicher sein), da die Variablen in der Methode exklusiv für jeden Thread sind und nicht mit anderen Threads geteilt werden. Zum Beispiel:
Kopieren Sie den Codecode wie folgt:
public int add(int count){
return ++count;//Hier kann man auch sagen, dass zustandslose Objekte threadsicher sein müssen
}
2. Ändern Sie die Zustandsvariable in eine unveränderliche Variable.
Kopieren Sie den Codecode wie folgt:
private final int count = 0;
3. Verwenden Sie beim Zugriff auf Zustandsvariablen eine Synchronisationsstrategie.
Kopieren Sie den Codecode wie folgt:
öffentliche synchronisierte Leerraumerhöhung() {
count++;
}
4. Verwenden Sie atomare Variablenklassen.
Kopieren Sie den Codecode wie folgt:
private AtomicInteger-Anzahl;
Erhöhung der öffentlichen Lücke() {
count.getAndAdd(1);
}