2010-04-07 9 views

Répondre

2

Je m'attendrais à ce que toute quantité de sommeil soit au moins l'équivalent fonctionnel de l'appel yield() donc il n'y a jamais un point où il est "inutile". Il y a certainement un point où de petites valeurs sont essentiellement indiscernables parce que le temps d'attente pour que le système d'exploitation revienne à votre thread est plus long qu'un petit temps de sommeil. Cela se produit probablement quelque part dans la gamme 5-10, mais bien sûr, il sera spécifique à l'OS.

2

C'est difficile à généraliser et cela dépend de votre problème spécifique. Mais, je n'utiliserais pas toi-même pour gérer les discussions. Vous pouvez mettre les discussions dans un Executor et laissez-les les gérer. Vous pouvez également utiliser une PriorityQueue pour commander vos tâches. Thread.sleep (0) entraînera le thread à céder, permettant à d'autres threads ayant la même priorité ou une priorité plus élevée de s'exécuter.

+0

Je ne pense pas que les Executors peuvent prédire quand un thread est inactif (ou peuvent-ils?) – someguy

2

Cela dépend de la priorité des threads ... D'après ce que je comprends, Thread.sleep génère efficacement le thread et définit sa priorité sur la plus faible pour la durée de la veille.

Comme d'autres l'ont mentionné, vous ne devriez probablement pas utiliser ceci pour planifier vos threads manuellement. Il est utile cependant, si vous avez partagé des mutex, vous pouvez les libérer et ensuite faire un Thread.sleep pour aider à résoudre une situation de threadlock.

+0

Il ne s'agit pas de planification; Il s'agit de gérer les ressources plus efficacement. – someguy