Компромисс с объявлением метода, синхронизированного в java?

У меня была проблема с блокировкой потока по какой-то до сих пор неизвестной причине в моем приложении для Android всякий раз, когда я пытался убить поток B из потока A (обычно иногда это срабатывало). Я предположил, что это произошло потому, что некоторые из моих методов выполняли вызовы по потокам без синхронизации. Я сделал метод отмены и множество методов, которые, по сути, были синхронизированы с обработчиками событий, и сделал несколько общих переменных изменчивыми, и все работало.

Я не знаю, какие из 20 нечетных изменчивых / синхронизированных объявлений, которые я добавил, действительно решили проблему , и это заставило меня задуматься: «А мне все равно? Это работает, не связывайся с этим!»

Итак, мой вопрос: Есть ли какой-либо компромисс, связанный с объявлением метода синхронизированным или примитивного изменчивого? Есть ли причина избегать этих объявлений, если они не нужны?

Edit
Рассматриваемые потоки - это соединение Bluetooth, которое принимает / отправляет потоковые данные, поэтому ASyncTask и другие решения для типов рабочих потоков не работают. т работать хорошо. Они предназначены для выполнения конечной задачи и прекращения ее выполнения. Некоторые, например ASyncTask, также добавляют много накладных расходов, которые просто убивают приложение. Для непрерывно работающих потоков, подобных этому, использование Thread по-прежнему является лучшим способом сделать это.

Я использую службу Android для создания потоков и управления ими, поэтому в этом отношении я следую парадигмам дизайна Android.

5
задан CodeFusionMobile 27 July 2011 в 19:21
поделиться