Я использовал ThreadLocal
очень мало, однако мне нужно знать об этом по соображениям работы. Я выполнил поиск по этому вопросу и узнал о концепции.
Я сделал пример ниже:
ThreadLocalMain. java -> Программа основного драйвера
package com.example.threads.threadlocal;
public class ThreadLocalMain {
public static void main(String[] args) throws InterruptedException {
Thread1 t1 = new Thread1("First");
Thread1 t2 = new Thread1("Second");
Thread1 t3 = new Thread1("Third");
t1.start();
t2.start();
t3.start();
}
}
Thread1. java -> Который использует ThreadLocal
package com.example.threads.threadlocal;
import com.example.threads.threadlocal.utils.Util1;
public class Thread1 extends Thread {
private static Integer unique_id = 0;
@SuppressWarnings("rawtypes")
private static ThreadLocal tl = new ThreadLocal() {
@Override
public Integer initialValue() {
return (++unique_id);
}
};
public Thread1(String name) {
super(name);
}
@Override
public void run() {
System.out.println("Current thread is --> " + Thread.currentThread().getName() + " with thread local value as --> " + tl.get());
Util1 u1 = new Util1();
u1.display(tl);
}
Util. java -> В этом Я хочу проверить значение ThreadLocal для Thread * Local
package com.example.threads.threadlocal.utils;
public class Util1 {
public void display(ThreadLocal tl) {
System.out.println("Inside Util1#display() method, executed by " + Thread.currentThread().getName()
+ " my thread local value is --> " + tl.get());
}
}
У меня есть основная драйверная программа, которая создает 3-ниточный поток, а в классе потока есть ThreadLocal
, который сохраняет значения для текущего потока.
Мой вопрос заключается в том, как мы можем напечатать значение ThreadLocal для текущего потока, который вызвал метод для некоторого объекта. В этом случае объект Util
. Я смог это сделать, передав экземпляр ThreadLocal
в метод Util's
display()
.
Так что мой вопрос:
Можно ли напечатать значение ThreadLocal в методе без передачи ThreadLocal
ссылки на метод? Это вообще возможно? Является ли мой метод не таким, как он предназначен для использования ThreadLocal
.