Java Thread Local 류 응용 실전 사례 분석

본 논문 의 사례 는 자바 ThreadLocal 류 응용 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
눈여겨보다
ThreadLocal 은 Thread Local Variable(스 레 드 부분 변수)이라는 뜻 으로 ThreadLocalVar 라 고 명명 하 는 것 이 더 적합 할 수 있 습 니 다.
스 레 드 부분 변수(ThreadLocal)의 실제 기능 은 매우 간단 합 니 다.이 변 수 를 사용 하 는 모든 스 레 드 에 변수 값 의 사본 을 제공 하여 모든 스 레 드 가 자신의 사본 을 독립 적 으로 바 꿀 수 있 고 다른 스 레 드 의 사본 과 충돌 하지 않도록 하 는 것 입 니 다.스 레 드 의 측면 에서 볼 때 모든 스 레 드 가 이 변 수 를 완전히 가지 고 있 는 것 같다.
ThreadLocal 클래스 의 용법 은 매우 간단 합 니 다.다음 세 가지 Public 방법 만 제공 합 니 다.
  • T get():이 스 레 드 부분 변수 에서 현재 스 레 드 던 전의 값 을 되 돌려 줍 니 다.
  • void remove():이 스 레 드 부분 변수 에서 현재 스 레 드 의 값 을 삭제 합 니 다.
  • void set(T value):이 스 레 드 부분 변수 에서 현재 스 레 드 던 전의 값 을 설정 합 니 다.
  • 실전
    코드
    
    class Account
    {
       /*     ThreadLocal     ,             
                        */
       private ThreadLocal<String> name = new ThreadLocal<>();
       //        name        
       public Account(String str)
       {
          this.name.set(str);
          //              name    
          System.out.println("---" + this.name.get());
       }
       // name setter getter  
       public String getName()
       {
          return name.get();
       }
       public void setName(String str)
       {
          this.name.set(str);
       }
    }
    class MyTest extends Thread
    {
       //     Account       
       private Account account;
       public MyTest(Account account, String name)
       {
          super(name);
          this.account = account;
       }
       public void run()
       {
          //   10 
          for (int i = 0 ; i < 10 ; i++)
          {
            //  i == 6               
            if (i == 6)
            {
               account.setName(getName());
            }
            //                 
            System.out.println(account.getName()
               + "    i :" + i);
          }
       }
    }
    public class ThreadLocalTest
    {
       public static void main(String[] args)
       {
          //       ,         Account,
          //        Account name,             Account name,      
          Account at = new Account("   ");
          /*
                       ,        
                 ThreadLocal   ,      
                       ,   i == 6  ,     
                            。
          */
          new MyTest(at , "   ").start();
          new MyTest(at , "   ").start ();
       }
    }
    
    
    2 운행
    초기 이름
    null 계 정의 i 값:0
    null 계 정의 i 값:0
    null 계 정의 i 값:1
    null 계 정의 i 값:1
    null 계 정의 i 값:2
    null 계 정의 i 값:2
    null 계 정의 i 값:3
    null 계 정의 i 값:3
    null 계 정의 i 값:4
    null 계 정의 i 값:4
    null 계 정의 i 값:5
    스 레 드 갑 계 정의 i 값:6
    스 레 드 갑 계 정의 i 값:7
    스 레 드 갑 계 정의 i 값:8
    스 레 드 갑 계 정의 i 값:9
    null 계 정의 i 값:5
    라인 을 계 정의 i 값:6
    라인 을 계 정의 i 값:7
    라인 을 계 정의 i 값:8
    라인 을 계 정의 i 값:9
    설명
    계 정 이름 은 실제 3 개의 사본 이 있 습 니 다.메 인 스 레 드 는 하나 이 고 다른 시작 하 는 두 스 레 드 는 각각 하나 입 니 다.그들의 값 은 서로 간섭 하지 않 습 니 다.모든 스 레 드 는 자신의 ThreadLocal 변 수 를 가지 고 있 습 니 다.이것 이 바로 ThreadLocal 의 용도 입 니 다.
    참고
    //www.jb51.net/article/170439.htm
    더 많은 자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
    본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기