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();
}
}
}
On souhaite écrire une méthode strtok qui :
Exemple :
CharSequence seq1=strtok("toto est beau",' '); // toto
CharSequence seq2=strtok(null,' '); // est
CharSequence seq2=strtok(null,' '); // beau
CharSequence seq2=strtok(null,' '); // null
Faire en sorte que l'on puisse exécuter cette méthode
depuis plusieurs threads différentes en même temps.
Penser aux variables locales à un thread.
On souhaite écrire une implantation de liste chaînée concurrente
n'utilisant ni section critique ni verrou.
La liste devra possèder deux méthodes addLast(E e)
et toString() permettant respectivement
d'ajouter un élement en queue de liste et d'afficher la liste.
Lors de la création, la liste sera créée avec un maillon.
L'idée pour éviter toutes synchronizations lors de
l'ajout consiste à récuperer le maillon à la fin de la liste
puis à tester en une opération atomique si le maillon
est toujours la fin de la liste et si oui à lui assigner
le nouveau maillon créé. Si ce n'est pas le dernier maillon,
on récupère de nouveau la fin de la liste
et l'on recommence le même algorithme.
Dans un premier temps, nous allons définir la liste comme contenant juste un élement ainsi qu'une référence sur un autre élement de la liste. L'ajout à la fin de la liste se fera par un parcours du chaînage.