2014-01-30 2 views
2

Это первый раз, когда я участвую в приложении на базе bluetooth на Android и для лучшего понимания того, как это работает, я изучаю пример BluetoothChat.
Более или менее я думаю, что все понимаю, но я пришел к выводу, что больше не могу идти дальше.
В чем причина написания данных таким образом?Несинхронизированный способ записи по Bluetooth на примере BluetoothChat

public void write(byte[] out) { 
    // Create temporary object 
    ConnectedThread r; 
    // Synchronize a copy of the ConnectedThread 
    synchronized (this) { 
     if (mState != STATE_CONNECTED) return; 
     r = mConnectedThread; 
    } 
    // Perform the write unsynchronized 
    r.write(out); 
} 

Почему бы не позвонить по mConnectedThread.write (out) напрямую?
И какова цель этой синхронизации?

Я понимаю (очевидно, ошибочно), этот код выполняется только в основном потоке, и в этом случае зачем нам этот мьютекс?

Спасибо всем.
P.S .: Извините за мой плохой английский!

ответ

0

На вопрос: И какова цель этой синхронизации? - Объект, по-видимому, получает доступ к переменным mThread и mConnect в потоковом безопасном режиме (т. Е. При изменении доступа к другой переменной во время обращения). Эта ссылка (и дополнительные ссылки в ней) будет через большее количество света на Java Synchronization

Смежные вопросы