threads thread sleepen problem crear java eclipse multithreading sleep warnings

sleepen - threads sleep in java



Java: Thread.currentThread(). Sleep(x) vs. Thread.sleep(x) (4)

En Java, dormir es un método estático. Ambos ejemplos hacen exactamente lo mismo, pero la versión anterior es confusa porque parece que está llamando a un método en un objeto específico, pero no lo está haciendo en absoluto. En su ejemplo, no importará mucho, pero es más peligroso si tiene lo siguiente:

someOtherThread.sleep(x);

Esta vez parece que estás diciendo otro hilo para dormir, pero de hecho estás poniendo el hilo actual a dormir. La forma de evitar este tipo de error es llamar siempre a los métodos estáticos utilizando la clase en lugar de un objeto específico.

Tengo esto en mi código

Thread.currentThread().sleep(x);

Eclipse me dice que use la estática

Thread.sleep(x);

en cambio, ¿por qué? ¿Cuál es la diferencia, hay alguna diferencia en la funcionalidad en absoluto entre estos 2 métodos?


Las dos llamadas al método tienen un comportamiento idéntico porque invocan el mismo método, pero usar el nombre de la clase ( Subproceso en este caso) en lugar de la instancia para acceder a campos y métodos estáticos hace que esta estática sea clara. Es por eso que se produce esta advertencia.

Pero teniendo en cuenta que los campos y métodos estáticos se muestran de forma particular en la mayoría de los IDE (por ejemplo, en letra cursiva en Eclipse e IntelliJ IDEA), ¿sigue siendo necesaria esta advertencia? Tal vez no tanto como era necesario en los primeros días de Java que los editores simples estaban en uso.


Solo hay un método, no dos, y es estático. Si bien puede llamar a un método estático a través de una referencia de instancia, no es un buen estilo. Indica que el programador cree que está llamando a un método de instancia. Un programador confundido podría pensar que puede causar otro hilo (no el actual) para dormir de esta manera, cuando eso no es lo que hace.

Ambas líneas de código hacen lo mismo, pero el segundo es un mejor estilo.


Thread.currentThread().sleep(x); o la forma en que Eclipse lo dice Thread.sleep(x); se requiere contexto estático si es necesario, así que esperamos un ligero retraso con este modo de suspensión.

El paradigma estático establecido por un objeto, solo afecta ese ciclo de vida de impresión de montón de objetos en particular, una vez más teniendo en cuenta el Ciclo de vida de objetos general, la estática no es tan molesto; si es necesario puede usarse para facilitar la codificación, pero debe hacerse con cuidado como print se refiere por Class (por ejemplo: - Class.forName(pkg.className) ) como por su nombre y no por cualquier object que sea copia de impresión única en tiempo de ejecución de Clase en la memoria HEAP .

De nuevo, el uso del objeto también tiene pros y contras por tipo de referencias Débiles, Fantasmas, Fuertes ...,

El código está convolucionado por la naturaleza. Es solo la forma en que lo hacemos para que funcione y funcione.