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 5Lance 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 5Puis dans un autre shell lancer la commande :
jconsoleet 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