SystemClock.sleep () vs. Thread.sleep () mientras espera un bucle de semáforo
Para sincronizar / cola de acceso a un recurso compartido, estoy a punto de utilizar un semáforo , ayudado por un bucle de espera.
Con el fin de no ejecutar en la vinculación de CPU, me gustaría sleep()
un poco dentro de ese lazo while.
- ¿Cómo dormir hilo en Xamarin android y ios?
- Despertar un hilo de dormir - interrupción () versus "dividir" el sueño en varios sueños
- Desactivar el reposo en determinadas actividades
- Cómo identificar el móvil está inactivo?
- ¿Puedo impedir que el teléfono se quede dormido en una página web?
Busqué la referencia de http://developer.android.com y encontré dos tales funciones del sueño () y estoy confundido en cuanto a cuál cabe qué escenario:
- Thread.sleep ()
- SystemClock.sleep ()
¿Cuál mejor se adapta al caso que describí y por qué?
- Android: ¿Estancias / niveles de sueño en un dispositivo Android?
- Retardo de tiempo en Android
- Toast no se mostrará antes de intentar / catch Thread.sleep ()
- La captura de pulsaciones de teclas cuando el teléfono Android está en modo de suspensión profunda
- Acceso a la red cuando el teléfono Android está dormido
- ¿Por qué mi app de Android llama a Create () cuando el sueño inicia en mi vista pero no desde la pantalla de inicio?
- Android sleep () sin bloquear la interfaz de usuario
- Cómo despertar el teléfono Android de dormir?
En primer lugar, ¿realmente necesita un bucle de espera? Normalmente puede solucionar sus problemas mediante notificaciones adecuadas, es decir, tener un objeto, llamando a wait () y notify () en él u otros medios (como una cola de bloqueo o Semaphore.acquire () en su caso).
Dicho esto, si realmente quieres un bucle de sondeo (que realmente no deberías hacer a menos que tengas que hacerlo), me quedaría con Thread.sleep (). No hay mucha diferencia, como dice la documentación, excepto que tiene la opción de interrumpir un Thread.sleep (). No te deshagas de la opción de hacerlo.
Tenga en cuenta que en caso de Thread.sleep (), usted va a tener que coger esa excepción – si eres extremadamente perezoso, probablemente se quedará con SystemClock.sleep ().
La verdad es:
Thread.sleep (n) podría ser interrumpido dentro de una llamada como AsyncTask utilizando asyncTask.cancel (true)
SystemClock.sleep (n) parece ignorar cualquier comando interrumpido, por lo que podría ser un riesgo de pérdida de memoria cuando se utiliza similar como aquí: https://github.com/square/leakcanary/blob/master/leakcanary-sample/ Src / main / java / com / ejemplo / leakcanary / MainActivity.java
- Cómo establecer la misma anchura y altura de un botón
- RuntimeException en el análisis de Gson JSON: Error al invocar java.lang.ClassLoader protegido () sin args