358 Stimmen

Was ist der Unterschied zwischen atomar / flüchtig / synchronisiert?

Wie funktionieren atomar / flüchtig / synchronisiert intern?

Was ist der Unterschied zwischen den folgenden Codeblöcken?

Code 1

private int counter;

public int getNextUniqueIndex() {
    return counter++; 
}

Code 2

private AtomicInteger counter;

public int getNextUniqueIndex() {
    return counter.getAndIncrement();
}

Code 3

private volatile int counter;

public int getNextUniqueIndex() {
    return counter++; 
}

Hat volatile auf folgende Weise funktionieren? Ist

volatile int i = 0;
void incIBy5() {
    i += 5;
}

gleichbedeutend mit

Integer i = 5;
void incIBy5() {
    int temp;
    synchronized(i) { temp = i }
    synchronized(i) { i = temp + 5 }
}

Ich denke, dass zwei Threads nicht gleichzeitig in einen synchronisierten Block eintreten können... habe ich Recht? Wenn das wahr ist, wie funktioniert dann atomic.incrementAndGet() Arbeit ohne synchronized ? Und ist es thread-sicher?

Und was ist der Unterschied zwischen dem internen Lesen und Schreiben von flüchtigen Variablen / atomaren Variablen? Ich habe in einem Artikel gelesen, dass der Thread eine lokale Kopie der Variablen hat - was ist das?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X