2015-07-06 13 views
6

Jestem na początku aplikacji Java. Stworzyłem usługę z pewnymi wątkami, ale nie zrozumiałem, kiedy muszę korzystać z synchronizacji, a kiedy nie.Android, kiedy muszę użyć zsynchronizowane w wątku

Na przykład, muszę połączyć się z połączeniem bluetooth z modułem, a następnie używam usługi z dwoma wątkami: ConnectThread rezygnuje z połączenia, a ConnectedThread zarządza połączeniem do odczytu/zapisu.

Kiedy więc muszę korzystać z synchronizacji?

Dziękuję

+0

Wielowątkowość w języku Java to bardzo złożony problem. Można to zrozumieć jedynie poprzez praktykę i czytanie dokumentacji lub samouczków. – dit

+0

możliwy duplikat [zsynchronizowany w java - Właściwe użycie] (http://stackoverflow.com/questions/24128997/synchronized-in-java-proper-use) –

+0

Możliwy duplikat http://stackoverflow.com/questions/24128997/synchronized-in-java-proper-use/24143267 # 24143267 –

Odpowiedz

2

Użyj zsynchronizowane słowa kluczowego Kiedykolwiek różne wątki używają tego samego (czyli globalne) zmienne (e), w zasadzie, gdy informacje są udostępniane. Sprawdź kod, aby zobaczyć, czy tak jest.

Synchronizacja nie jest potrzebna, gdy zmienne używane przez każdy wątek są lokalne. Używanie go może spowodować utratę wydajności i może spowodować niespójność.

+0

Głosuj mi proszę – Ramonster

+1

Przeważnie dobra odpowiedź, ale można ją poprawić. Wzajemne wykluczenie (najbardziej widoczny aspekt bloku 'zsynchronizowanego') nie jest potrzebne, ponieważ dwa lub więcej wątków ma dostęp do tych samych danych. Jest jednak potrzebna, gdy jeden wątek musi wprowadzić dane do tymczasowego, nieważnego stanu, że inne wątki nie mogą być widoczne. –

+0

Fajnie, dziękuję za opinie, naprawdę to doceniam! – Ramonster

0

Unikać jak najwięcej wątków, ponieważ nie jestem z nimi związany, ale postaram się wyjaśnić to tak prosto, jak tylko mogę.

używać tylko zsynchronizowane, jeśli wiele wątków ma dostęp do metody lub blok kodu.

jest to proste rozwiązanie, aby uniemożliwić innym wątkom dostęp do tego samego kodu, podczas gdy inny nadal go używa. Pomoże to zapobiec problemom związanym z pamięcią, ale spowoduje problemy z wydajnością. ponieważ kody zsynchronizowane są znacznie wolniejsze niż niezsynchronizowany kod. również Wierzę, że zakleszczenia mogą być również problemem

+0

Wątki nie powodują _dostępu_ kodu, one _execute_ it, i nie ma żadnej nieodłącznej szkody, pozwalając dwóm lub więcej wątkom na wykonanie tego samego kodu w tym samym czasie. To nie jest kod, który się liczy: Synchronizacja polega na _data_. Wzajemne wykluczenie (tj. To, co daje blok "zsynchronizowany") jest potrzebne, gdy jeden wątek nie może przesuwać stanu programu bez tworzenia tymczasowego nieprawidłowego stanu, którego nie można zobaczyć w innych wątkach. –

+0

wielkie wyjaśnienie @jameslarge .. podziękowania za wyczyszczenie tego. Naprawdę nie wydałem mojej myśli bardzo dobrze ... – lababo