On souhaite créer deux threads exécutant le même code.
Pour différencier les deux thread, lors de la construction
de celle-ci, un entier unique (id) leur sera fourni,
0 pour la première et 1 pour la seconde.
Chaque thread executera le même code qui consiste à afficher
hello suivi du numéro de la thread ansi que la
valeur d'un compteur indiquant le nombre de fois que la thread
a affiché ce message.
Exemple :
...
hello 0 10714
hello 0 10715
hello 0 10716
hello 0 10717
hello 1 15096
hello 1 15097
hello 1 15098
hello 1 15099
...
java HelloThread 5
Lance 5 threads en concurrence.
On souhaite maintenant permettre à l'utilisateur en tapant un nombre d'interrompre le thread ayant cet id.
java -Dcom.sun.management.jmxremote HelloThread 5
Puis dans un autre shell lancer la commande :
jconsole
et sélectionner HelloThread dans les processus locaux.
Vérifier par ce biais que les threads sont bien interrompus.
On souhaite créer deux threads qui change le même un champs d'un même objet :
public class Test {
int value;
public static void main(String[] args) {
final Test test=new Test();
for(int i=0;i<2;i++) {
final int id=i;
new Thread(new Runnable() {
public void run() {
for(;;) {
test.value=id;
if (test.value!=id)
System.out.println("id "+id+" "+test.value);
}
}
}).start();
}
}
}
La méthode strtok :
Voici le code :
public static CharSequence strtok(CharSequence input,char delimiter) {
int offset;
if (input==null) {
input=lastInput;
if (input==null)
return null;
offset=lastOffset;
}
else {
lastInput=input;
offset=0;
}
for(int i=offset;i<input.length();i++) {
if (input.charAt(i)==delimiter) {
lastOffset=i+1;
return input.subSequence(offset,i);
}
}
lastInput=null;
return input.subSequence(offset, input.length());
}
private static CharSequence lastInput;
private static int lastOffset;
et un exemple :
CharSequence seq1=strtok("toto est beau",' '); // toto
CharSequence seq2=strtok(null,' '); // est
CharSequence seq3=strtok(null,' '); // beau
CharSequence seq4=strtok(null,' '); // null