JDK 1.6 설명서에는 LocalThread<T>
의 사용 방법에 대한 예제가 나와 있습니다. 복사하여 여기에 붙여 넣으십시오.ThreadLocal <T> JDK의 문서
예를 들어, 아래 클래스는 각 스레드의 로컬 식별자를 생성합니다. 스레드의 ID는 UniqueThreadIdGenerator.getCurrentThreadId()
을 처음 호출 할 때 지정되며 후속 호출에서 변경되지 않습니다.
import java.util.concurrent.atomic.AtomicInteger;
public class UniqueThreadIdGenerator {
private static final AtomicInteger uniqueId = new AtomicInteger(0);
private static final ThreadLocal <Integer> uniqueNum =
new ThreadLocal <Integer>() {
@Override
protected Integer initialValue() {
return uniqueId.getAndIncrement();
}
};
public static int getCurrentThreadId() {
return uniqueId.get();
}
} // UniqueThreadIdGenerator
내 문제는 다음과 같습니다
여러 스레드가 어떤 초기화가 없기 때문에 그것은 단지 0을 반환UniqueThreadIdGenerator.getCurrentThreadId()
를 호출 할 때. 다음과 같이해서는 안됩니다 :
public static int getCurrentThreadId() {
return uniqueNum.get();
}
이제 첫 번째 호출 후에 변수를 이동하고 초기화합니다.
고유 ID를 생성하는 대신 각 스레드가 이미 가지고있는 고유 ID를 사용할 수 있습니다. 'long id = Thread.currentThread(). getId(); ' –