Java: Thread.currentThread (). Sleep (x) frente a Thread.sleep (x)


86

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? ¿Existe alguna diferencia de funcionalidad entre estos 2 métodos?


1
hay una 'Acción de guardado' en Eclipse que reemplazará automáticamente el acceso de miembros estáticos a través de variables de instancia con acceso estático a través del nombre de la clase: habilite esta Acción de guardado y tantas otras Acciones de guardado como esté de acuerdo (por ejemplo, elimine conversiones innecesarias, innecesarias 'esto', etc.).
les2

Respuestas:


135

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 estar pensando que puede hacer que otro hilo (no el actual) se quede dormido de esta manera, cuando eso no es lo que hace.

Ambas líneas de código hacen lo mismo, pero la segunda es mejor estilo.


24
+1 para mencionar que el programador puede querer hacer dormir un hilo en particular a través de someThread.sleep (), lo cual no es así.
Chii

32

En Java, el sueño 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 le estás diciendo a otro hilo que duerma, pero de hecho estás poniendo el hilo actual a dormir. La forma de evitar cometer este tipo de error es llamar siempre a métodos estáticos utilizando la clase en lugar de un objeto específico.


¿Quiere decir que tanto currentThread como someOtherThread se suspenderán mientras ejecutan esta única línea "someOtherThread.sleep (x);"? ??
Kanagavelu Sugumar

3
No. El hilo actual se suspenderá, sin importar en qué objeto Thread se llame .sleep. No puedes poner otros ThreadS a dormir (así).
Torque

3

Las dos llamadas a métodos tienen un comportamiento idéntico porque invocan el mismo método, pero el uso del nombre de la clase ( Thread en este caso) en lugar de una instancia para acceder a los campos y métodos estáticos aclara esta estática. Por eso se produce esta advertencia.

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


0

Thread.currentThread().sleep(x);o la forma en que Eclipse lo diceThread.sleep(x); se requiere un contexto estático si es necesario, por lo que esperamos un ligero retraso con este sueño.

El paradigma estático establecido por un objeto, solo afecta el ciclo de vida de impresión del montón de objetos en particular, nuevamente considerando que el ciclo de vida general del objeto estático no es tan molesto, si es necesario, puede usarse para facilitar la codificación, pero debe hacerse con cuidado como pie estático. print es referido por Class(por ejemplo: - Class.forName(pkg.className)) como like por nombre y no por cualquiera objectque sea una copia impresa única en tiempo de ejecución de Class en HEAPmemoria.

Una vez más, el uso de objeto también tiene pros y contras por tipo de referencias Débil, Fantasma, Fuerte ....,

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


1
Para hablar de hilo, se genera de forma asincrónica, aunque es posible que tengamos cosas sincrónicas en el hilo. Por naturaleza, las cosas, todas las cosas son asincrónicas, aunque en ocasiones encontramos cosas que son sincrónicas. Ninguna de las cosas es sincrónica, incluso nosotros inmiscuimos la cuántica o la astronomía.
Dev Anand Sadasivam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.