ThreadLocal
- static한 객체한테 thread별로 같은 쓰레드 안에서는 값을 유지해 준다.
- 동일한 쓰레드라면 파라미터로 넘기지않아도 값을 꺼낼 수 있다.
- ThreadLocal을 사용하려면 static으로 사용한다. static이 아니면 매번 필드가 메모리에 만들어 진다.
- RequestContextHolder는 내부적으로 ThreadLocal이 구현되어 있다.
public class MyContext{
public static ThreadLocal threadLocalValue = new ThreadLocal<>();
public static int value;
}
package examples;
import examples.util.MyContext;
public class Test {
public static void main(String[] args){
MyThread myThread1 = new MyThread(100);
MyThread myThread2 = new MyThread(200);
myThread1.start();
myThread2.start();
}
}
class MyThread extends Thread{
int i ;
public MyThread(int i){
this.i = i;
}
public void run(){
while(true) {
MyContext.threadLocalValue.set(i);
// MyContext.value = i;
MyService service = new MyService();
service.print(i);
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyService{
public void print(int i){
int k = MyContext.threadLocalValue.get();
// int k = MyContext.value;
System.out.println(i + " : " + k);
}
}
0 개의 댓글:
댓글 쓰기