В чем смысл синхронизации здесь?В чем смысл этой синхронизации?
Почему бы не просто использовать mConnectedThread.write(out)
?
Фрагмент кода из BluetoothChat образца для Android (found here)
/**
* Write to the ConnectedThread in an unsynchronized manner
* @param out The bytes to write
* @see ConnectedThread#write(byte[])
*/
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);
}
Конечно, не зная больше, соединение все равно может быть закрыто между концом блока синхронизации и фактическим вызовом write(), который теперь может привести к совершенно другой ошибке. И, если ConnectThread обрабатывает write() s после отмены изящества, просто присваивая его локальной переменной, и проверка на null будет еще проще. – PSpeed