Bonjour,

Je me suis lancé dans l'analyse de performance en comparant l'utilisation d'un seul processeur versus plusieurs (qu'on appelle cœurs sur certaines machines).

Pour l'instant avec un programme test, en éclatant la lecture d'une table MySQL de 7000 lignes, je passe de 94 secondes à 16 secondes avec 4 processeurs en découpant les recherches par gammes de numéros (par exemple de 0 à 999 puis de 1000 à 1999, etc..)
Ceci m'encourage revoir ou à soigner le design de mes applications futures lorsqu'il y aura des traitements séquentiels longs pour chaque ligne.
Toutefois pour être sûr que dans certains cas je ne risque pas d'inter-locks il faut que je comprenne parfaitement comment sont protégés les programmes et les variables.

1. Supposons qu'une Classe maître démarre 3 fois la même sous-classe définie comme runnable. Est-ce que les variables (non static) sont uniques à chaque instance de cette classe ?

2. Supposons que l'on n'ait qu'une seule instance d'une classe avec plusieurs threads lancés chacune ayant sa méthode run, mais partageant une autre méthode. par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
Thread th1 =new Thread("T1") {
    public void run({
       int rc = maMéthode(argument1);  
  }
}.start();
 
Thread th2 =new Thread("T2") {
    public void run() 
  {
       int rc = maMéthode(argument2);  
  }
}.start();
 
public static int maMéthode(int arg)
{
   int x = arg;
   .....
  return rc;
}
Dans ce cas, dois-je utiliser synchronized pour protéger la variable x ? Que ce soit une méthode définie comme static ou non ?

Cela peut sembler trivial comme question, mais je ne suis pas sûr de moi.

Merci d'avance

Gérard