2016-04-11 10 views
1

Ich bin nicht vertraut mit flüchtigen Schlüsselwort und Thread. Ich habe einen Code, der Vergleich mit == macht. Ich wurde vorgeschlagen, diese Objekte sollten mit Gleichgestellten verglichen werden.flüchtige Thread-Objekt und Thread-Objekt-Vergleich in Java

while(pollingThread == thisThread) 

wo pollingThread wie folgt definiert: private volatile PollingThread pollingThread;

und PollingThread ist private class PollingThread extends Thread

thisThread erklärt als Thread thisThread = Thread.currentThread();

ich viele String-Vergleiche equals durchgeführt haben, mit und ich kenne die Regeln. Aber ich war nur Kurioses, wenn das Ändern des == Betreibers mit .equals Methode irgendein Problem verursacht. (Ich weiß nicht, welches Problem ich konfrontiert werde)

+0

'Thread' überschreibt' equals' nicht. – Savior

+1

Ich denke '==' ist hier geeignet. Es gibt nur ein "Thread" -Objekt pro aktuellem Thread, also ist "equals" nicht sinnvoll. – aioobe

+0

Außerdem gibt es kein _volatile Objekt_. Das Schlüsselwort 'volatile' gilt für Felder. Verwechseln Sie keine Objekte, Felder und Referenzen. – Savior

Antwort

0

"Ich habe viele String-Vergleiche mit equals durchgeführt und ich kenne die Regeln. Aber ich war nur Kurioses, wenn die Änderung der == Operator mit .equals-Methode jedes Problem verursachen."

Für String

.equals(): Es Hebt entspricht Verfahren und Kontrollen String durch seine Referenz und wenn falsch überprüft dann durch Zeichen.

"==": Es prüft nur, wenn beide im Vergleich String Referenzen sind gleich oder nicht.

Für Thema

.equals und "==" beide sind gleich. Sie überprüfen die Referenz für beide Threads.

public boolean equals(Object obj) { 
    return (this == obj); 
} 
+1

Versuchen Sie nun, was passiert, wenn pollingThread null ist, und revidieren Sie dann die Behauptung, dass sie gleich sind;) Sie können stattdessen Objects.equals verwenden. – Voo

+0

@Voo Sie haben Recht, Wenn pollingThread Objekt ** _ null _ ** sein kann, dann kann @MonsterJava mit 'Objects.equal (obj1, obj2)' gehen – rns