CodeWithInheritableLocal.java |
public class CodeWithInheritableLocal implements Runnable {
final static int MAX_LEVEL = 4;
public InheritableThreadLocal level = new InheritableThreadLocal() {
protected Object childValue(Object parentValue) {
System.out.println(Thread.currentThread().getName() +
": appel à childValue()");
return new Integer(((Integer)parentValue).intValue() + 1);
}
protected Object initialValue() {
System.out.println(Thread.currentThread().getName() +
": appel à initialValue()");
return new Integer(0);
}
};
public void run() {
System.out.println(Thread.currentThread().getName() +
": niveau de parenté " + level.get());
if (((Integer)level.get()).intValue() < MAX_LEVEL) {
String name = "fils de " + Thread.currentThread().getName();
Thread child = new Thread(this,name);
System.out.println("Démarrage d'un nouveau processus léger");
child.start();
}
} }