7
votes

Java - Accès à la méthode statique du sommeil - Qu'est-ce qui ne va pas?

Lorsque je mets le code ci-dessous dans Netbeans, Netbeans me donne un avertissement à côté de celui-ci disant "accéder à la méthode statique du sommeil". XXX

Est-ce que je fais quelque chose de mal? Devrais-je appeler cela différemment? Je ne fais rien de multi-fileté. J'ai juste une méthode principale simple que je veux dormir pendant un moment.


1 commentaires

Notez la note: depuis Java 5, il y a un fuseau horaire et vous pouvez appeler votre sommeil sur ceux-ci, ce qui est à mon avis beaucoup plus lisible. Par exemple. 'TimeUnit.seconde.sleep (2); '


6 Réponses :


6
votes

SLEEP est statique, vous y accédez donc avec thread.sleep (2000); . Il affecte le fil actuel.

du Javadoc:

provoque le fil actuellement exécutant dormir (temporairement cesser l'exécution) Pour le nombre spécifié de millisecondes. Le fil ne perd pas propriété de tous les moniteurs.

Qu'est-ce que cela signifie que vous ne pouvez pas dormir un autre fil, seul celui que le code est dans.


0 commentaires

2
votes

c'est parce que la méthode Sleep () est déclarée comme statique, donc xxx

est identique à xxx


0 commentaires

10
votes

thread.CurrentThread () renvoie une instance de la classe de thread. Lorsque vous invoquez une méthode statique, vous ne voulez que travailler sur la classe elle-même. Ainsi, appelez une méthode statique sur le thread de courant Vous obtiendrez un avertissement que vous appelez la méthode sur une instance.

Vous alliez simplement appeler thread.sleep (2000); code> Ce serait équivalent à Thread.CurrentThread.sleep (2000); Code> P>

Ceci est important à savoir parce que les personnes ont été brûlées comme: p>

Runnable someRunnable = new Runnable(){
    public void run(){
        Thread.sleep(2000);
    }
};


1 commentaires

@Greg, vous ne dormez pas 'dormir a', vous envoyez un message à «A» que cela doit aller dormir. Une façon de le faire est d'avoir exécuter Rechercher une variable étant définie et si la variable est définie, il se rend à votre disposition et une méthode dans 'A' pour qu'un appelant extérieur puisse utiliser pour définir cela variable.



1
votes

NetBeans vous donnant un avertissement car vous accédez à la méthode statique de la référence de fil non de la classe de thread. Essayez ceci xxx

la méthode de veille provoque le sommeil en cours d'exécution. N'ayez pas besoin d'appeler fil.currentThread ().


0 commentaires

1
votes

Chaque fois que vous essayez d'accéder à la méthode statique à l'aide de l'objet, ce n'est pas la meilleure pratique, NB donne un avertissement à ce moment-là, voici le même cas

thread.Currentthread () vous retournera un objet de fil


0 commentaires

2
votes

Il n'y a pas de méthode sur les instances de thread qui correspond à "Dormir (long)".

fil.currentThread (). Sommeil (2000); Compilez-vous cependant, car il existe une méthode sur la classe de thread appelée sommeil () avec un long argument.

Java permet de cela comme un truc de compilateur de sorte que de nouveaux codeurs puissent exécuter cela lorsqu'ils sont confondus sur l'accès statique des méthodes.

Cependant, ce que cela est réellement résolu à dans le compilateur est:

thread.sleep (2000);

Le code suivant est également équivalent:

thread t = nouveau thread (nouveau runnable () {Public Void Run () {// ne rien}}}); T.Sleep (2000);

comme une seule affiche (John V) a souligné, cela ne rend pas le dormeur de fil de thread (T) - le fil actuel qui a créé l'objet thread est mis en veille.

L'avertissement existe de telle sorte que vous vous souveniez que vous accédez à une méthode statique d'une classe, pas une méthode d'une variable d'instance.

Le code approprié pour écrire est toujours thread.sleep (2000); - Ne jamais accéder aux méthodes statiques à travers une instance pour éviter toute confusion et cet avertissement.


0 commentaires