스레드 A에서 스레드 B를 죽이려고 시도 할 때마다 (여전히, 때로는 효과가있었습니다) 안드로이드 응용 프로그램에서 아직 알려지지 않은 몇 가지 이유로 잠그고있는 스레드에 문제가있었습니다. 내 메서드 중 일부는 동기화되지 않고 스레드간에 호출을 만들기 때문에 그것은 것 같았다. 나는 cancel 메소드와 본질적으로 이벤트 핸들러가 동기화 된 메소드를 만들었으며 몇 가지 공유 변수를 휘발성으로 만들고 모든 것이 작동했습니다.Java에서 메소드를 동기화하여 선언문을 사용하여 거래합니까?
내가 추가 한 이상한 휘발성/동기화 된 선언 20 개 중 어느 것이 실제로 문제를 해결했는지 모르겠다. 그리고 그 생각은 "내가 신경 써야할까요? 효과가 있습니다.
그럼, 내 질문은 : 동기화 또는 원시 휘발성 선언과 관련된 트레이드 오프가 있습니까? 필요없는 경우 이러한 선언을 피할 수있는 이유가 있습니까? 문제
편집
스레드 (들) AsyncTask를 다른 작업자 스레드 형 솔루션은 잘 작동하지 않도록,/수신 스트리밍 데이터를 전송하는 블루투스 연결입니다. 그들은 유한 작업을 수행하고 완료되면 종료하도록 설계되었습니다. ASyncTask와 마찬가지로 앱을 죽이는 많은 오버 헤드가 추가됩니다. 이와 같이 지속적으로 실행되는 스레드의 경우 스레드를 사용하는 것이 여전히 최선의 방법입니다.
나는 안드로이드 디자인 패러다임을 따르기 위해 안드로이드 Service을 사용하여 스레드를 생성하고 관리합니다.
(작은?) 고유 한 성능 패널티가 있습니다. "스레드 잠김 문제"(비 휘발성 멤버 필드 폴링)가 무엇인지 알기는 어렵지만 데드락을 얻는 좋은 방법처럼'synchronized '소리를 자유롭게 추가하는 것, 그리고 앱이 어떻게되는지를 어떻게 알 수 있습니까? 경쟁 조건이 없다.큰 문제는 스레드간에 공유 상태가 * 많이 * 있습니다. 공유해야 할 대상을 결정하고, 공유 상태가 스레드 안전 (가능한 불변의 도움을 줌)인지 확인하고, 스레드가 통신하는 방법을 결정해야합니다 (Handler/ConcurrentLinkedQueue/LinkedBlockingQueue?). –