Получение нулевого вывода для этой программы для каждого потока

Мой вывод: - Поток клиента - 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
Другие вопросы по тегам