2015-07-06 7 views
6

verwenden muss Ich bin am Anfang einer Java-Anwendung. Ich habe einen Dienst mit einigen Threads erstellt, aber ich habe nicht verstanden, wann ich synchronisieren muss und wann nicht.Android, wenn ich syncronized in einem Thread

Zum Beispiel muss ich mit einer Bluetooth-Verbindung zu einem Modul verbinden, und dann verwende ich einen Dienst mit zwei Threads: ConnectThread gibt die Verbindung und ConnectedThread schafft Verbindung zu lesen/schreiben.

Also wann muss ich synchronisiert verwenden?

Danke

+0

Multithreading in Java ist ein sehr komplexes Problem. Es kann nur durch das Üben und Lesen von Dokumentationen oder Tutorials verstanden werden. – dit

+0

mögliches Duplikat von [synchronisiert in Java - Korrekte Verwendung] (http://stackoverflow.com/questions/24128997/synchronized-in-java-proper-use) –

+0

Mögliches Duplikat von http://stackoverflow.com/questions/24128997/synchronised-in-java-proper-use/24143267 # 24143267 –

Antwort

2

das Synchronized Schlüsselwort verwenden, wenn Sie verschiedene Threads das gleiche (das heißt ein globales) Variablen (n) verwenden, im Grunde, wenn Informationen gemeinsam genutzt werden. Überprüfen Sie den Code, um festzustellen, ob dies der Fall ist.

Synchronisiert wird nicht benötigt, wenn die Variablen, die jeder Thread verwendet, lokal sind. Ihre Verwendung würde dann zu Leistungseinbußen führen und zu Inkonsistenzen führen.

+0

Bitte abmelden – Ramonster

+1

Meistens eine gute Antwort, aber es könnte verbessert werden. Gegenseitiger Ausschluss (der sichtbarste Aspekt eines "synchronisierten" Blocks) wird nicht immer benötigt, nur weil zwei oder mehr Threads auf dieselben Daten zugreifen. Aber es ist erforderlich, wenn ein Thread die Daten in einen temporären ungültigen Zustand versetzen muss, den andere Threads nicht sehen dürfen. –

+0

Cool, danke für das Feedback, wirklich zu schätzen! – Ramonster

0

Ich vermeide Threads so viel wie möglich, da ich nicht so erfahren bin, aber ich werde versuchen, es so einfach wie möglich zu erklären.

verwenden Sie nur synchronisiert, wenn mehrere Threads Zugriff auf Ihre Methode oder Block des Codes haben.

Es ist eine einfache Lösung, um zu verhindern, dass andere Threads auf denselben Code zugreifen, während ein anderer ihn noch verwendet. Dies wird helfen, speicherbezogene Probleme zu vermeiden, führt jedoch zu Leistungsproblemen. als synchronisierte Codes sind viel langsamer als nicht synchronisierter Code. auch glaube ich, dass Deadlocks ein Problem sein könnten

+0

Threads haben keinen _access_ code, sie execute_ it, und es gibt keinen inhärenten Schaden, wenn zwei oder mehr Threads denselben Code zur gleichen Zeit ausführen können. Es ist nicht der Code, der zählt: Bei der Synchronisation dreht sich alles um _data_. Gegenseitiger Ausschluss (d. H. Was ein "synchronisierter" Block Ihnen liefert) wird benötigt, wenn es unmöglich ist, dass ein Thread den Zustand des Programms vorstellt, ohne einen temporären _invaliden Zustand_ zu erzeugen, den andere Threads nicht sehen dürfen. –

+0

großartige Erklärung @jameslarge ..danks für das Aufräumen. Habe meine Gedanken nicht wirklich gut gelöst ... – lababo

Verwandte Themen