Bluetoothチャットの例を見ていますが、以下のコードでローカルのConnectedThreadオブジェクトのコピーに同期されている理由がわかりません。確かにrとmConnectedThreadは同じオブジェクトを指していますか?
public synchronized void write(byte[] out)
{
    // Create temporary object
    ConnectedThread r;
    // Synchronize a copy of the ConnectedThread
    synchronized (this)
    {
        if (mState != ICommsService.STATE_CONNECTED)
            return;
        r = mConnectedThread;
    }
    // Perform the write unsynchronized
    r.write(out);
}