2010-07-23 8 views
4

Pour faire une application en Java sous Linux avec des threads si je voulais définir un niveau de priorité qui sont des valeurs min et max?Niveau de priorité de thread

Sous Windows, les plages vont de 0 (le plus bas) à 31 (le plus haut).

+0

double possible de [priorité Java Threads dans Linux] (http://stackoverflow.com/questions/128039) – krock

Répondre

0

-20 (le plus élevé) à +20 (le plus bas), 0 est la valeur par défaut. Vous ne pouvez pas incrémenter la valeur nice d'une valeur négative si vous n'êtes pas root, cependant. (par exemple, incrémenter une bonne valeur de 5 par -7 serait ignoré, car vous n'avez généralement pas les permissions pour le faire).

EDIT voir https://stackoverflow.com/questions/128039/java-threads-priority-in-linux

+1

Je pense que vous confondez le fil Linux/priorité du processus avec la Priorité de thread Java Java vous permet de définir une priorité de thread Java pour n'importe quelle valeur de MIN_PRIORITY à MAX_PRIORITY. La manière dont ces valeurs sont mappées aux priorités de thread natif est ... non pertinente ici. –

+0

les valeurs vont de -20 (le plus haut) à 19 (le plus bas) – xdevel2000

+0

@Stephen C Eh bien, après avoir lu plus de réponses et de commentaires, il veut vraiment * savoir * comment ces valeurs sont mappées (ce qui est spécifique à la JVM). (Et non, je ne l'ai pas confondu - Java * est * indépendant de la plate-forme et il ne serait pas logique d'utiliser des paramètres spécifiques du système d'exploitation.) – Tedil

5

En Java, il est Thread.MIN_PRIORITY à Thread.MAX_PRIORITY il n'y a pas de limites définies, car cela dépend du système d'exploitation sous-jacent et/ou machine virtuelle Java.

Pour des raisons de performances, si vous partagez des ressources entre des threads de priorités différentes, vous risquez de rencontrer des problèmes d'inversion de priorité. C'est à ce moment qu'un thread de priorité faible contient une ressource avec un thread de haute priorité qui l'attend. Ensuite, le fil de haute priorité peut attendre longtemps.

+4

'MIN_PRIORITY' et' MAX_PRIORITY' [* ont * des valeurs définies] (http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/constant-values.html#java.lang .Thread.MIN_PRIORITY). Ils sont 1 et 10 respectivement. La chose définie par l'implémentation est la façon dont ces niveaux correspondent aux niveaux réels de prioité de l'OS! –

+0

@JoachimSauer le lien est cassé. –

3

La classe Thread a deux int champs statiques appelés MIN_PRIORITY et MAX_PRIORITY dont les valeurs réelles sont potentiellement (sinon) plate-forme spécifique1 et 10. Il est théoriquement possible que ces valeurs puissent changer dans une version future de Java. Cependant, il est hautement improbable, pas moins parce qu'un tel changement casserait la compatibilité binaire. (La valeur d'une constante primitive peut être liée au code qui l'utilise au moment de la compilation.) Dans les deux cas, il est implicite dans la spécification de la méthode setPriority que la valeur de MIN_PRIORITY soit inférieure ou égale à la valeur de MAX_PRIORITY.

EDIT

Ah ... si vous vraiment veulent savoir comment les valeurs de priorité Java (par exemple Thread.MIN_PRIORITY et Thread.MAX_PRIORITY) carte Linux priorités de fil natif:

  • Encore une fois , les mappages de priorité peuvent être spécifiques à la plate-forme/JVM/à la version. Sun ne précise pas ce qu'ils sont.

  • Il est hautement improbable que vous puissiez déterminer les mappages de priorité dans une application Java pure. Expérimentalement, vous pourrez peut-être comprendre les mappages en définissant diverses priorités de threads Java et en examinant les priorités de thread natives Linux correspondantes. Vous pouvez également télécharger la commande ps pour imprimer les priorités de threads.

  • Vous pouvez également télécharger et lire le code source OpenJDK (pour votre version/plate-forme) pour voir ce que fait réellement le runtime Java.

EDIT 2

En fait, selon this page, la mise en correspondance des priorités Java aux priorités de threads natifs dépend (et peut être défini explicitement à l'aide) HotSpot -XX options java. (Recherche sur la page pour « priorité ».)

+0

Ma question concernait la valeur sur le système Linux qui a été mappé par la JVM quand je fais setPriority avec MAX_PRIORITY! – xdevel2000

+0

@ xdevel2000 - la seule réponse fiable à 100% est d'imprimer les valeurs de ces constantes ** en utilisant votre JVM ** installée ... et ne supposez pas qu'elles seront identiques sur une autre JVM. –

+0

@ xdevel2000: vos questions n'expliquent pas vraiment que vous êtes intéressé par le mappage de la valeur Java à la valeur du noyau Linux. Peut-être devriez-vous développer cela en mettant à jour votre question. –

1

Avez-vous essayé d'utiliser les constantes Thread.MIN_PRIORITY et Thread.MAX_PRIORITY pour définir la priorité de vos discussions?

1

Il est à noter que la priorité de thread est juste un indice qui est largement ignoré sous Linux, sauf si vous êtes root et que vous ne pouvez l'abaisser que sous Windows. En résumé, vous ne devriez pas écrire votre programme pour vous fier au comportement des priorités de threads. Tout ce que vous essayez de faire est mieux fait d'une autre manière.

0

Utilisez setPriority, le niveau de priorité va de 1 (le moins important) à 10 (le plus important), si aucun niveau n'est défini explicitement, le niveau de priorité est de 5 par défaut.

Vérifiez aussi les constantes MAX_PRIORITY et MIN_PRIORITY

Questions connexes