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

J’ai ceci dans mon code

Thread.currentThread().sleep(x); 

Eclipse me dit d’utiliser le statique

 Thread.sleep(x); 

au lieu de cela, pourquoi? Quelle est la différence, existe-t-il une différence de fonctionnalité entre ces deux méthodes?

Il n’y a qu’une méthode, pas deux, et c’est statique. Bien que vous puissiez appeler une méthode statique via une référence d’instance, ce n’est pas un bon style. Cela indique que le programmeur pense qu’il appelle une méthode d’instance. Un programmeur confus pense peut-être qu’il peut faire en sorte qu’un autre thread (et non l’actuel) s’endorme de cette façon, alors que ce n’est pas ce qu’il fait.

Vos deux lignes de code font la même chose mais la seconde est meilleure.

En Java, le sumil est une méthode statique. Vos deux exemples font exactement la même chose, mais l’ancienne version est déroutante car il semble appeler une méthode sur un object spécifique, mais cela ne fonctionne pas du tout. Dans votre exemple, cela n’a pas beaucoup d’importance, mais c’est plus dangereux si vous avez les éléments suivants:

 someOtherThread.sleep(x); 

Cette fois, il semble que vous disiez à un autre thread de dormir, mais en fait vous mettez le thread actuel en sumil. Le moyen d’éviter ce type d’erreur est de toujours appeler des méthodes statiques en utilisant la classe plutôt qu’un object spécifique.

Les deux appels de méthode ont un comportement identique car ils invoquent la même méthode, mais en utilisant le nom de classe ( Thread dans ce cas) plutôt que l’instance pour accéder aux méthodes et aux champs statiques, cela efface cette statique. C’est pourquoi cet avertissement est produit.

Mais étant donné que les champs et les méthodes statiques sont présentés d’une manière particulière dans la plupart des IDE (par exemple en italique dans Eclipse et IntelliJ IDEA), cet avertissement est-il toujours nécessaire? Peut-être pas autant que c’était au début de Java que des éditeurs simples étaient utilisés.

Thread.currentThread().sleep(x); ou comme le dit Eclipse , Thread.sleep(x); le contexte statique est nécessaire s’il est dans le besoin, donc nous attendons un léger retard avec ce sumil.

Le paradigme statique défini par un object n’affecte que le cycle de vie de l’emstackment de l’object, en considérant que le statique du cycle de vie de l’object n’est pas si gênant, il peut être utilisé pour faciliter le codage print est référencé par Class (par exemple: – Class.forName(pkg.className) ) comme par son nom et non par un object qui est une copie d’impression unique de Class dans la mémoire HEAP .

Encore une fois, l’utilisation d’object a aussi des avantages et des inconvénients par type de référence faible, fantôme, fort …,

Le code est lié à la nature. C’est comme ça que nous faisons pour le rendre fonctionnel et fonctionnel.