Article complet: Devinette sur les ThreadLocal

19/05/2009

Permalink 18:37:39, Catégories: Récapitulatif Java, javanettes, Avancé, 797 mots   French (FR) , Delbecq David

[Java] Devinette sur les ThreadLocal

Avant la parution d'une série d'articles sur la classe ThreadLocal, je vous propose une série de 5 petites devinettes java (des javanettes on va dire), sur un même code. Une connaissance poussée de java et de la classe ThreadLocal peut-être nécessaire pour trouver les solutions et surtout les justifier, mais c'est aussi l'occasion de découvrir, qui sait, les dessous d'une classe méconnue. N'hésitez pas à poster vos idées de réponses sous forme de commentaires.

[Suite:]

Soient les classes Data (une classe qui prend en mémoire le nombre de Megaoctets passé en argument), A, B et C dont le code est ci-dessous. Vous constaterez qu'elle sont fortement similaires
public class Data {  
  private byte[] datas = null;  
  public Data(int sizeInMegs){  
    datas = new byte[1024*1024*sizeInMegs];  
  }  
}
public class A {  
  private ThreadLocal tl = new ThreadLocal();  
  Data data;  
  public A(Data data){  
    tl.set(this);  
    this.data=data;  
  }  
}
public class B {  
  private static ThreadLocal tl = new ThreadLocal();  
  private Data data;  
  public B(Data data){  
    this.data=data;  
    tl.set(this);  
  }  
}
public class C {  
  Data data;  
  ThreadLocal  tl = new ThreadLocal ();  
  public C(Data data){  
    tl.set(data);  
  }  
}  
Ces codes sont utilisés de 5 manières différentes par le main suivant:
  public static void main(String[] args) throws Exception { 
    final int size = ....; 
    if (args[0].equals("A")){ 
      while(true) 
        new A(new Data(size)); 
    } else if (args[0].equals("B")){ 
      while(true) 
        new B(new Data(size)); 
      
    } else if (args[0].equals("C")){ 
      while(true) 
        new C(new Data(size)); 
    } else if (args[0].equals("D")){ 
      while (true){ 
        new Thread(){ 
          @Override 
          public void run() { 
            new A(new Data(size)); 
          } 
          
        }.start(); 
        Thread.sleep(100); 
      } 
    } else if (args[0].equals("E")){ 
      while (true){ 
        new Thread(){ 
          @Override 
          public void run() { 
            new B(new Data(size)); 
          } 
          
        }.start(); 
        Thread.sleep(100); 
      } 
    }  
  }
En supposant que le code du main est exécuté sur une JVM 1.6.0_11 dont la mémoire est volontairement limitée à 64M et que la variable size est comprise entre 2 et 25, quel sera son comportement si on lui passe successivement les paramètres A à E? Et surtout, pourquoi?
  • Avec A.
    1. java.lang.OutOfMemoryError;
    2. Le code restera en boucle infinie;
    3. Ça dépend de size;
    4. Stéphanie de Monaco!
  • Avec B.
    1. java.lang.OutOfMemoryError;
    2. Le code restera en boucle infinie;
    3. Ça dépend de size;
    4. C'est du à l'aïl?
  • Avec C.
    1. java.lang.OutOfMemoryError;
    2. Le code restera en boucle infinie;
    3. Ça dépend de size;
    4. I see 44510 people
  • Avec D.
    1. java.lang.OutOfMemoryError;
    2. Le code restera en boucle infinie;
    3. Ça dépend de size;
    4. 42.
  • Avec E.
    1. java.lang.OutOfMemoryError;
    2. Le code restera en boucle infinie;
    3. Ça dépend de size;
    4. 0x5f3759d5.
Aide de jeu en page suivante.

1 2 Page suivante »

Social Bookmarking:

                                     

Commentaires:

Connectez-vous pour vous abonner à cet article:

Flux de commentaires pour cet article : Atom 1.0  RSS 2.0
Commentaire de: _xme_ [Membre]
Il manque un peu une correction ;)
du coup seul un test permet d'obtenir les solutions
Permalien 18/03/2010 @ 15:24
Commentaire de: Delbecq David [Membre]
exact, un article doit suivre sur les Threadlocal (toujours en brouillon, désolé). Je posterais un commentaire quand il sera prêt.
Permalien 19/03/2010 @ 16:33
Commentaire de: _xme_ [Membre]
tiens je viens de découvrir qu'en utilisant le lien vos notifications, on pouvait aussi voir les réponses blogs comme celui ci :)
Et du coup j'ai découvert un message non lu ^^
en tous cas merci pour ces questions qui m'ont clairement montré que je pouvais repartir étudier :D

Permalien 10/06/2010 @ 12:02

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Codes et autres, sauce java, parfum objet

Catégories


Rechercher

<  Avril 2011  >
Lun Mar Mer Jeu Ven Sam Dim
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web