5.FreshMinutes.IT – Java & IT

5 minutes pour consolider ses connaissances en Java et dans les Nouvelles Technos.
  • Accueil
  • À propos
  • Télécharger Java
  • Contact, Twitter, Tumblr & Buzz

Maitriser ses ressources

Eric Vialle | Samedi 4 octobre 2008 | 18:57


  • Google Buzz

Nous allons nous rafraichir la mémoire sur l’ordonnancement des threads, nous verrons comment  partager au mieux les ressources de ces threads. Pour les personnes ayant besoin d’un bon rafraichissement, au lieu d’exécuter le code a la suite, les threads permettent de faire tourner en parallèle du code. Par exemple, sur un serveur, vous pouvez écouter les requêtes et les traiter parallèlement.

Créer un thread.

Dans ce thread, nous allons faire tourne en simultané le code de un ThreadA et de deux ThreadB.

  1. class ThreadA implements Runnable {
  2.    public void run() {
  3.       System.out.println("Je suis le Thread A");
  4.       System.out.println("Je suis toujours le Thread A");   }
  5. }
  6.  
  7. class ThreadB implements Runnable {
  8.    public void run() {
  9.       System.out.println("Je suis le Thread B");
  10.       System.out.println("Je suis toujours le Thread B");   }
  11.    }
  12. }
  13.  
  14. public class ManyNames {
  15.    public static void main(String [] args) {
  16.  
  17.       Thread myThreadA = new ThreadA();
  18.       Thread myThreadB_1 = new ThreadB();
  19.       Thread myThreadB_2 = new ThreadB();
  20.  
  21.       myThreadA.start();
  22.       myThreadB_1.start();
  23.       myThreadB_2.start();
  24.     }
  25. }

Ce code vous affichera plusieurs lignes du type
Je suis le Thread A
Je suis le Thread B
Je suis toujours le Thread A
Je suis le Thread B
Je suis toujours le Thread B
Je suis toujours le Thread B

L’ordre des phrases n’est pas garanti. C’est la JVM qui gère l’ordonnancement des threads.

Jonglage entre threads

La JVM s’occupe d’allouer du temps de calcul a chaque Thread. Pour gérer le temps d’allocation pour chaque Thread, la JVM planifie de façon préemptive (c’est à dire avec la possibilité d’interrompre une tache) et un système de priorité.

Régler sa Priorité

Il existe 10 niveaux de priorité allant de 1 a 10. Le niveau maximal étant le niveau 10 et le niveau le plus faible étant 1.

Sur certaines JVM, il n’y a pas 10 niveaux. Toutefois rassurez-vous, la JVM de Sun contient ces 10 niveaux.

Vous pourrez retrouver ce niveau avec les constantes
·    Thread.MIN_PRIORITY (1)
·    Thread.NORM_PRIORITY (5)
·    Thread.MAX_PRIORITY (10)

Attention ! Régler la priorité ne vous garantira pas forcement une part de temps de calcul beaucoup plus grand.

Priorité par défaut

Le thread initial (lorsque vous lancez votre application) est de niveau 5, c’est-à-dire de niveau normal. Tous les threads enfants d’un thread ont par défaut (c’est-à-dire sans avoir explicitement défini la priorité a l’aide de .setPriority) le niveau de priorité du thread parent.

Laisser la main a la JVM avec yield()

La méthode static yield() (static est donc indépendant d’un objet mais pas indépendant  au thread en cours) .

Différents états d’un thread en Java.

La méthode yield()va refaire passer l’état de “en cours” d’execution à “exécutable”.

La méthode yield() permet de dire a la JVM qu’on a plus rien de spécial a faire dans le thread en cours et qu’on laisse du temps d’execution au profit d’un autre thread.

A voir aussi:

  • Synchronisation
  • Deadlocks

Sources:

  • Introduction à la programmation temps réel et ordonnancement
  • SCJP 5 Guide
  • Etats d’un thread


Catégories
Java, Tutoriel
Tags
java systeme tutorial
Flux rss des commentaires
Flux rss des commentaires
Trackback
Trackback

« Pause… Utiliser les services Spring IOC dans des Actions Struts 2.1 avec l’Autocablage (Autowiring) »

2 Responses to “Maitriser ses ressources”

  1. Nicolas dit :
    Lundi 20 octobre 2008 à 16:00

    Salut Eric

    Article interessant mais on m’a fait la remarque que c’est de la programmation à l’ancienne. Il vaut mieux parler des nouvelles classes de Java 5 et 6 avec entre autre la classe Executor, plus simple à manipuler pour les debutants et bien plus propre à programmer je pense

    Nicolas

    http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Executor.html

  2. Eric Vialle dit :
    Mardi 21 octobre 2008 à 12:18

    Bonjour Nicolas,

    Ton collègue n’a pas vraiment tort. Executor est plutôt un framework et non un outil, comme on devrait utiliser ArrayList à la place de Vector.

    Comme pas mal de framework, il permet une implémentation plus rigoureuse et maintenable, mais pas forcement plus de souplesses.

    Mais les bases de ce framework repose toujours sur les concepts exposés ci dessus et on offre.

    Avant de se lancer dans l’utilisation d’un framework, il est bon de comprendre le sous-jacent.

Leave a Reply

Cliquer ici pour annuler la réponse.

Articles récents

  • Optimiser le temps de chargement pour le web mobile avec iPhone, jQTouch, Struts 2 et Tomcat
  • La philosophie du Domain Driven Design User Group et l’état des lieux * Users Group en Février 2010
  • Introduction au NoSQL (et de Redis) ou le compte rendu du NoSQL User Group Paris de Février 2010
  • Gérer le Cache-Control HTTP dans une application Web Java EE avec Tomcat
  • Compiler son code? “It’s so 2000s” ou un apercu de Play et JRebel
  • Le blog change d’adresse
  • Le Paris JUG a fêté ses 2 ans: compte-rendu
  • Activer la compression GZip sur votre serveur Tomcat, afin d’optimiser le temps de chargement de vos pages

Navigation

  • Actualités Flux pour tous les articles classés dans Actualités
  • Architecture IT Flux pour tous les articles classés dans Architecture IT
  • Base de données Flux pour tous les articles classés dans Base de données
  • Java Flux pour tous les articles classés dans Java
    • Dévelopement Tips Flux pour tous les articles classés dans Dévelopement Tips
    • EDI Flux pour tous les articles classés dans EDI
    • J2ME Flux pour tous les articles classés dans J2ME
    • J2SE Flux pour tous les articles classés dans J2SE
    • Java EE Flux pour tous les articles classés dans Java EE
    • Tutoriel Flux pour tous les articles classés dans Tutoriel
  • Non classé Flux pour tous les articles classés dans Non classé
  • NoSQL Flux pour tous les articles classés dans NoSQL

Promo

Mots Clefs

adobe apache application web Base de données benchmark bugs c# checkstyle dérivation eclipse find bugs findbugs flex framework play google gzip http iPhone jar Java Java User Group java web start JVM microsoft mysql object objet open source optimisation oracle performance plugin pmd polymorphisme qualité recrutement rich internet application serveur silverlight struts struts 2 sun test Tomcat web

WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.

Twitter

  • RT @cretzel Nice overview over Hibernate inheritance/proxy problems http://trunc.it/68ny0 #hibernate in reply to cretzel 1 day ago
  • More updates...

Livres Pour Aller Plus Loin…

Blogoliste

  • Berthou.com
  • Le blog de hugu
  • PHP – Le Blog de Fatiha
  • techno.blog(java4it)
Get Adobe Flash playerPlugin by wpburn.com wordpress themes
rss Flux rss des commentaires valid xhtml 1.1 design by jide powered by Wordpress get firefox