2010-12-07 5 views
0

내 synchorization이 약간 거칠고 (UI가 더러울 수도 있습니다.) 필자의 동기화 된 자바 메소드 서로를 막고있다. 내 현재 프로젝트는 안드로이드에 있지만 더 일반적인 Java 케이스에도 관심이 있습니다.동기화 된 메소드가 블로킹되어 있는지 확인하려면 어떻게해야합니까? (Android + Java)

감사합니다, 당신이 당신의 UI 스레드에서 synchronized의 모든 사용을 제거하면

답변

2

이 어떻게 UI 행동 하는가? 갑자기 부드럽고 반응이 좋으면 다른 스레드가 잠금을 기다리는 동안 실제로 너무 오래 차단된다는 것을 알게됩니다.

그러나 아무런 차이가 없으며 여전히 불안한 경우 배경 스레드가 너무 바빠서 CPU 시간의 UI 스레드가 굶어 죽는 문제가 있다는 것을 알고 계실 것입니다.

+0

감사합니다. 위에서 언급 한 것처럼 내 앱이 블로킹 중인지 알고 싶습니다. sychronizing하지 않고 내 데이터베이스는 SQLite의 안드로이드 구현에 대한 문제 (아주 확실한 theres 문제) 그래서 내가 이것을 시도하기 전에 잠시 기다릴 수 있습니다 손상받을 수 있습니다. 그것은 또한 내가 C++에서부터 내가 좋아하는 자바에 이르렀다는 것을 생각 나게한다. 나는 이것을 위해 매우 유용 할 #define을 놓친다. – aronp

+0

여러분의 UI 스레드와 동기화 된 메서드에서 데이터베이스 항목을 사용하지 않기를 바랍니다. 플래시 기반 I/O가 얼마나 느린지 기억하십시오. 당신은 실제로 무슨 일이 일어나고 있는지 조금 더 자세하게 물어볼 수 있습니까? –

+0

글쎄, 내 구체적인 문제에 대해 정말로 알고 싶지는 않지만, 싱크로 화 된 메소드가 블로킹하는 경우 일반적으로 액세스 권한을 얻는 방법. 필자의 경우 캐시와 데이터베이스를 하나의 클래스로 묶은 UI는 캐시와 다른 스레드를 데이터베이스에서 읽은 다음 캐시에 저장하므로 UI와 충돌이 발생했는지 알고 싶었습니다. 나는 동기화가 더 잘될 수 있다고 확신했기 때문에 읽지 않는다. 그러나 내가 존재하지 않는 문제를 고칠지를 미리 알고 싶다. – aronp

2

traceview을 사용하여 응용 프로그램을 프로파일 링하면 각 기능 (기능 자체 포함 및 제외)에 소요 된 시간을 알 수 있습니다.

나는 이것이 도움이된다고 생각합니다.

+0

감사합니다. 이미이 작업을 수행했으며 응용 프로그램이 예상대로 작동하고 있습니다. 저림이 가끔 발생하기 때문에 전반적인 성능보다는 블록을 얻을 때를 알고 싶습니다. – aronp

관련 문제