2017-08-01 5 views
1

So versuche ich zu bekommen, wie Kotlin die Synchronisation von Eigenschaften behandelt. Wenn ich diese Klasse:Synchronize Eigenschaft Getter/Setter

class Foo { 
    var a = 0 
    var b = 0 
} 

und ich möchte sicherstellen, dass ein & b haben alle Zugriff synchronisiert. Wie würde ich es tun? Ich habe versucht, die Anmerkung mit:

class Foo { 
    @Synchronized 
    var a = 0 
    @Synchronized 
    var b = 0 
} 

aber Kotlin gibt mir einen Compiler-Fehler:

This annotation is not applicable to target 'member property with backing field' 

Ich versuche nur, einen besseren Griff auf Thread-Sicherheit in Kotlin zu bekommen. Es ist etwas, worüber ich in Java immer OCD war, und ich versuche herauszufinden, wie ich es in Kotlin richtig handhaben kann.

Antwort

6

Sie können nicht auf einer Eigenschaft synchronisieren, aber Sie können die Zugriffsmethoden synchronisieren. Verwenden Sie die folgende Syntax:

class Foo { 
    var a = 0 
     @Synchronized get 
     @Synchronized set 

    //or 

    @get:Synchronized @set:Synchronized 
    var b = 0 
} 
Verwandte Themen