Получение нулевого вывода для этой программы для каждого потока
Мой вывод: - Поток клиента - 1.... выполняется с идентификатором клиента: ноль Поток клиента - 4.... выполняется с идентификатором клиента: ноль Поток клиента - 3.... выполняется с идентификатором клиента: ноль Поток клиента - 2.... выполняется с идентификатором клиента: null
Пожалуйста, объясните, почему ноль в каждом случае. Почему значение не увеличиваетсяenter code here
пакетный тест;
class CustomerThread extends Thread {
static Integer custId = 0;
private static ThreadLocal tl = new ThreadLocal() {
protected Integer intialValue() {
return ++custId; //This ++custId is not incrementing
}
};
CustomerThread(String name) {
super(name);
}
public void run() {
System.out.println(Thread.currentThread().getName() + "....executing with customer id :" + tl.get());?// tl.get() is not getting the values
}
}
class Test {
public static void main(String[] args) {
CustomerThread c1 = new CustomerThread("Customer Thread - 1");
CustomerThread c2 = new CustomerThread("Customer Thread - 2");
CustomerThread c3 = new CustomerThread("Customer Thread - 3");
CustomerThread c4 = new CustomerThread("Customer Thread - 4");
c1.start();
c2.start();
c3.start();
c4.start();
}
}
1 ответ
Решение
Вам нужно на самом деле set() и get() взаимодействовать с переменной ThreadLocal:
class CustomerThread extends Thread {
private static int customerID = 0;
private static ThreadLocal tl = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return ++customerID;
}
};
CustomerThread(String name) {
super(name);
}
public void run() {
tl.set(tl.get());
System.out.println(Thread.currentThread().getName() + "....executing with customer id :" + tl.get());
}
}
Выход:
Customer Thread - 1....executing with customer id :1
Customer Thread - 3....executing with customer id :3
Customer Thread - 4....executing with customer id :4
Customer Thread - 2....executing with customer id :2