Я изучаю java Threads, я перехожу к уроку о значениях локальных потоков, и я решил создать программу, которая их использует. Я установил значение локального потока в конструкторе (конструктор потока), чтобы показать его на экране, чтобы проверить, что он сработал, но когда я запускаю потоки, локальные значения обращаются к NULL, поэтому я получаю NullPointerException. Я что-то пропустил, или я могу установить только значения локального потока в методе старта?Выполняет ли настройку переменной ThreadLocal в конструкторе?
package practice;
import static java.lang.System.out;
import java.util.Scanner;
class Try
{
Thread a1,a2,a3;
int x=0;
synchronized void change(int who){
out.println("who called"+who);
out.println("x initial="+x);
x++;
out.println("x after="+x);
}
class now implements Runnable{
ThreadLocal<Integer> id=new ThreadLocal<Integer>();
public void run(){
for(int i=1;i<=25;i++){
out.println("im running id="+id.get());
change(id.get());
out.println("after call me="+id.get());
}
}
now(int givenid){
out.println("my givenid is "+givenid);
id.set(givenid);
out.println("my id is "+id.get());
}
}
public static void main(String[] args)
{
new Try();
}
Try(){
a1=new Thread(new now(1));
a2=new Thread(new now(2));
a1.start();
a2.start();
}
}
где у вас используется метод set() или initialValue() метода threadLocal для инициализации threadlocal? –
Не говорите «ThreadLocal _variable_». Хотя верно, что у вас есть переменная, а ее тип - «ThreadLocal», локальность потока не является свойством переменной; Это свойство объекта _object_, к которому относится переменная. ThreadLocal _object_ - это объект с методами get() и set(), которые ссылаются на разные местоположения в зависимости от того, какой поток вызывает их. –