synchronized block on grails funktioniert unter Windows, aber nicht unter Linux

Ich habe eine Grails-Anwendung, die sich auf einen synchronisierten Block in einem Dienst stützt. Wenn ich es unter Windows starte, funktioniert die Synchronisation wie erwartet, aber wenn ich unter ams Linux starte, bekomme ich eine StaleObjectStateException.

Das Problem wird im folgenden Beispiel reproduziert.

class TestService {

private final Object $lock = new Object[0];

TesteSync incrementa() {

    synchronized ($lock) {
        TesteSync t = TesteSync.findById(1)
        t.contador++
        t.save(flush: true)

        Thread.sleep(10000)

        return t
    }
}

}

ach meinem Verständnis tritt diese Ausnahme auf, weil mehrere Threads versuchen, dasselbe Objekt zu speichern. Deshalb verwende ich einen synchronisierten Block.

Linux Java:

java version "1.7.0_85"OpenJDK-Laufzeitumgebung (amzn-2.6.1.3.61.amzn1-x86_64 u85-b01)OpenJDK 64-Bit-Server-VM (Build 24.85-b03, gemischter Modus)

Windows java:

java version "1.7.0_79"Java (TM) SE-Laufzeitumgebung (Build 1.7.0_79-b15) Java HotSpot (TM) 64-Bit-Server-VM (Build 24.79-b02, gemischter Modus)

Irgendwelche Hinweise

Vielen Dan

Antworten auf die Frage(2)

Ihre Antwort auf die Frage