JavaTM Platform
Standard Ed. 6

java.lang
클래스 ThreadLocal<T>

java.lang.Object 
  상위를 확장 java.lang.ThreadLocal<T>
직계의 기존의 서브 클래스:
InheritableThreadLocal


public class ThreadLocal<T>
extends Object

이 클래스는 thread 로컬 변수를 제공합니다. 이러한 변수는,get 메소드 또는 set 메소드를 사용해 액세스 하는 thread가 각각 독자적으로, 변수의 초기화된 카피를 갖는다고 하는 점으로써, 일반적으로의 변수와 다릅니다. 일반적으로,ThreadLocal 인스턴스는, 상태를 thread에 관련지으려고 하는 클래스에서의 private static 필드입니다 (사용자 ID, 트랜잭션(transaction) ID 등).

예를 들어, 이하의 클래스에서는, 각 thread에 대해서 로컬인 일의의 식별자가 생성됩니다. thread의 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
 

각 thread는 , thread가 생존하고 있어 ThreadLocal 인스턴스가 액세스 가능한 사이는, thread 로컬 변수의 카피에의 암묵적인 참조를 보관 유지합니다. thread가 종료하면(자), thread 로컬 인스턴스의 카피는, 모두 가베지 컬렉트됩니다 (이러한 카피에의 참조가 그 밖에 존재하는 경우를 제외하다).

도입된 버젼:
1.2

생성자 의 개요
ThreadLocal ()
          thread 로컬 변수를 작성합니다.
 
메소드의 개요
 T get ()
          이 thread 로컬 변수의 현행 thread의 카피내의 값을 돌려줍니다.
protected  T initialValue ()
          이 thread 로컬 변수에 대한 현재의 thread의 「초기치」를 돌려줍니다.
 void remove ()
          이 thread 로컬 변수에 대한 현재의 thread의 값을 돌려줍니다.
 void set (T  value)
          이 thread 로컬 변수의 현재의 thread의 카피가 지정된 값으로 설정합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

ThreadLocal

public ThreadLocal()
thread 로컬 변수를 작성합니다.

메소드의 상세

initialValue

protected T  initialValue()
이 thread 로컬 변수에 대한 현재의 thread의 「초기치」를 돌려줍니다. 이 메소드는, thread가 get() 메소드로 최초로 이 변수에 액세스 했을 때에 불려 갑니다. 다만, thread가 이전에 set(T) 메소드를 호출했을 경우를 제외합니다. 그 경우, thread에서는 initialValue 메소드는 불려 가지 않습니다. 일반적으로, 이 메소드는 thread 당 1 회만 불려 갑니다만, 후속의 remove() 와 그 후의 get() 의 호출의 경우에, 재차 불려 가는 일도 있습니다.

이 구현은, 단지 null 를 돌려줄 뿐입니다. 프로그래머가 thread 로컬 변수가 null 이외의 초기치를 가지도록(듯이) 하는 경우,ThreadLocal 를 서브 클래스화해, 이 메소드를 오버라이드(override) 할 필요가 있습니다. 일반적으로, 익명의 내부 클래스가 사용됩니다.

반환값:
이 thread 로컬의 초기치

get

public T  get()
이 thread 로컬 변수의 현행 thread의 카피내의 값을 돌려줍니다. 이 변수가 현재의 thread의 값을 가지지 않는 경우는, 우선,initialValue() 메소드의 호출에 의해 반환되는 값에 초기화됩니다.

반환값:
이 thread 로컬의 현행 thread의 값

set

public void set(T  value)
이 thread 로컬 변수의 현재의 thread의 카피가 지정된 값으로 설정합니다. thread 로컬의 값을 설정하는데 initialValue() 메소드에 크게 의존하고 있는 대부분의 서브 클래스에서는, 이 메소드를 오버라이드(override) 할 필요는 없습니다.

파라미터:
value - 이 thread 로컬의 현행 thread의 카피에 포함되는 값

remove

public void remove()
이 thread 로컬 변수에 대한 현재의 thread의 값을 돌려줍니다. 이 thread 로컬 변수가 계속되어 현재의 thread에 의해 읽어내지는 경우, 그 값이 잠정적으로 현재의 thread에 의해설정되어 있지 않은 한, 그 값은 그 initialValue() 메소드를 호출하는 것에 의해 재차 초기화됩니다. 그 결과, 현재의 thread에 initialValue 메소드의 복수의 호출이 생기는 일이 있습니다.

도입된 버젼:
1.5

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.