2016-07-21 16 views
-4

[Bearbeitet] Dies betrifft die Synchronisation eines Objekts in Java. Ich habe Zweifel und brauche Klärung.In Java Zugriff auf synchronisierte Objekte

Wenn ich auf ein Objekt in beiden Threads gleichzeitig zugreife Zugriff auf seine Methode von einem Thread und in einem anderen Thread Neuinitialisierung des Objekts als null. Kann dieses Objekt synchronisiert werden?

+0

Objekte sind nicht null. Referenzen sind null. Unklar, was du verlangst. – EJP

Antwort

0

Sie können ein Objekt nicht "null" machen. Wenn ein Thread über eine Variable auf ein Objekt zugreift und ein anderer Thread dann diese Variable auf null setzt, hat der erste Thread immer noch den Verweis auf dieses Objekt und kann darauf zugreifen. Wenn der zweite Thread zuerst ausgeführt wird, d. H. Die Variable auf null setzt, kann der erste Thread diesen Verweis nicht an erster Stelle erhalten.

Beispiel:

MyThreadsafeObject ref = new MyThreadsafeObject(); 

//start another thread and pass in the reference 
new Thread(new MTOHandler(ref)).start(); 

ref = null; 

//start a 3rd thread and pass in the now-null reference 
new Thread(new MTOHandler(ref)).start(); 

Hier ist der erste Thread, der gestartet wird, kann immer noch das Objekt verwenden, das vergangen ist, während der zweite Thread kann nicht, wie es ist, eine Null-Referenz zu bekommen.

Wenn Sie mit Ihrer Frage so etwas wie synchronized(ref) { ... } meinen, dann könnten Sie auf dem Objekt synchronisieren, solange ref nicht Null ist, wenn Sie den Block starten.

Verwandte Themen