공유 리소스에 대한 액세스를 동기화/대기열로 만들기 위해 대기 루프를 사용하여 Semaphore을 사용하려고합니다.SystemClock.sleep()과 Semaphore 루프를 기다리는 동안 Thread.sleep()
CPU 페깅을하지 않으려면 조금 안에 그 while
루프를 넣고 싶습니다.
하나 개 더 정장 내가 설명한 경우와 그 이유는 무엇입니까?
공유 리소스에 대한 액세스를 동기화/대기열로 만들기 위해 대기 루프를 사용하여 Semaphore을 사용하려고합니다.SystemClock.sleep()과 Semaphore 루프를 기다리는 동안 Thread.sleep()
CPU 페깅을하지 않으려면 조금 안에 그 while
루프를 넣고 싶습니다.
하나 개 더 정장 내가 설명한 경우와 그 이유는 무엇입니까?
우선 대기 루프가 필요합니까? 일반적으로 Object (예 : Object)를 사용하여 wait() 및 notify()를 호출하거나 다른 방법 (예 : 차단 대기열 또는 사례의 Semaphore.acquire)과 같은 적절한 알림을 사용하여 문제를 해결할 수 있습니다.
그런데 폴링 루프 (실제로는하지 않으면 안되는) 폴링 루프를 원한다면 Thread.sleep()을 고수 할 것입니다. 설명서에는 Thread.sleep()을 인터럽트 할 수 있다는 점을 제외하면 차이점이별로 없습니다. 그렇게 할 수있는 옵션을 없애지 마십시오.
Thread.sleep()의 경우에는 예외를 잡아야 할 것입니다. 매우 게으른 경우 SystemClock.sleep()을 사용하는 것이 좋습니다.
위대하고시의 적절한 설명에 감사드립니다. 나는'Semaphore.acquire()'가 최선의 선택 일 수 있다는 것을 발견했다. – srf
wait()를 사용하는 경우 반복해야합니다. wait()는 notify() 호출 전에 리턴 할 수 있습니다. http://docs.oracle을 참조하십시오.올바른 사용법은 com/javase/7/docs/api/java/lang/Object.html # wait()를 참조하십시오. "7 주 연속 실행 모델 7 개 : 스레드가 풀릴 때"에서는이 주제를 잘 설명합니다. – Jonathan
진실은 :
에 Thread.sleep (N) (참) asyncTask.cancel를 사용하여 AsyncTask를 같은 호출 내에서 중단 될 수
SystemClock.sleep (n)은 어떤 중단 명령을 무시하는 것 따라서 다음과 같이 비슷한 메모리 누수가 발생할 수 있습니다. https://github.com/square/leakcanary/blob/master/leakcanary-sample/src/main/java/com/example/leakcanary/MainActivity.java
그들은 관련이 없습니다. 이 예에서는 화면을 회전시킬 시간을주기 위해 잠을 사용하기 때문에 누출이 발생합니다. –
Thread.sleep()은 java에서 제공되는 기능입니다. InterruptedException
이이 함수를 호출하는 동안 발생할 수 있습니다.
SystemClock.sleep()은 android에서 제공하는 기능입니다. 이 함수를 호출하는 동안 InterruptedException이 발생하지 않으며 인터럽트 이벤트는 다음 인터럽트 이벤트까지 지연됩니다.
SystemClock.sleep (밀리 초)은 에 Thread.sleep (밀리 초) 매우 유사한 효용 함수이지만 InterruptedException
무시한다. Thread.interrupt()
을 사용하지 않으면 지연을 위해이 함수를 사용하십시오. 스레드의 인터럽트 된 상태를 유지하기 때문입니다.
결론 : 결론 : 안드로이드 응용 프로그램을 갖고 싶다면 SystemClock.sleep (millis)을 사용하십시오.
'SystemClock.sleep()'은 UI 스레드에서 실행된다고 생각합니다. –