공공 클래스는 실행 { // 다른 스레드 자신의 값을 가지는 변수는 분리의 다른 스레드 사이에 해결의 ThreadLocal 클래스는, // ThreadLocal를 배치 할 수있는 다른 스레드의 값이 저장 될 수있다. 공용 정적 있어 ThreadLocal T1 = 새로운 새 있어 ThreadLocal (); 공공 정적 무효 메인 (문자열 []에 args) { IF (t1.get () == 널 ) { 에서 System.out.println는 ( "값을주지 않을" ) T1한다. 는 SET ( "내 값" ); } 에서 System.out.println (t1.get ()); 에서 System.out.println (t1.get ()); // 값을주지 않을 // 내가 가치 //나는 가치 } }
// ThreadLocal를, 다른 스레드가 스레드 사이에 고립되어 동일한 대상에 해당 여기에 입증 ThreadLocal를 수정하면서 서로 영향을주지 않습니다, // 스레드 B 및 스레드 공공 클래스를 실행 { // 검증 스레드 변수 분리 공공 정적 T1은의 ThreadLocal = 새로운 새 상기의 ThreadLocal ()를 공용 정적 무효 {메인 (문자열 [] 인수)를 ThreadA (A)에 = 새로운 새 ThreadA ()에서, 그 ThreadB B = 새로운 신규 하고 ThreadB (); a.start (); b.start () 은 try { 대 ( int로 ; I <10, I = 0이 I ++ ) { t1.set를 ( "메인"+ (1 + I.)); 에서 System.out.println ( "기본 GET 값 ="+ t1.get ()); Thread.sleep를 ( 200 ); } } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } } 정적 클래스 ThreadA는 연장 스레드 { @Override 공개 공극 실행 () { 시도 { 위해 ( int로 I = 0; I <10은, I ++ ) { t1.set ( "ThreadA"+는 (i + 1 )); 에서 System.out.println ( "ThreadA 얻을 값 ="+ t1.get ()); Thread.sleep를 ( 200 ); } } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } } } 정적 클래스 ThreadB는 연장 스레드 { @Override 공개 공극 실행 () { 시도 { 위해 ( int로 I = 0; I <10은, I ++ ) { t1.set ( "ThreadB"+는 (i + 1)); 에서 System.out.println는 ( "값을 얻을 ThreadB ="+ t1.get ()); Thread.sleep를 ( 200 ); } } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } } } } 메인 GET 값 = 메인 1 ThreadA GET 값 = ThreadA1 ThreadB GET 값 = ThreadB1 ThreadB GET 값 = ThreadB2 ThreadA GET 값 = ThreadA2 메인 GET 값 = 메인 2 메인 GET 값 = main3 ThreadB GET 값 = ThreadB3 ThreadA GET 값 = ThreadA3 ThreadA 얻을 값 = ThreadA4 ThreadB GET 값 = ThreadB4 메인 GET 값 = main4 ThreadA GET 값 = ThreadA5 ThreadB GET 값 = ThreadB5 메인 GET 값 = main5 메인 GET 값 = main6 가치를 ThreadB = ThreadB6 ThreadA 값 수 = ThreadA6 주요 GET 값을 = main7 가치를 ThreadB = ThreadB7 ThreadA GET 값 = ThreadA7 ThreadA 얻을 값 = ThreadA8 ThreadB GET 값 = ThreadB8 주요 GET 값 = main8 ThreadA GET 값 = ThreadA9 ThreadB GET 값 = ThreadB9 주요 GET 값 = main9 주요 GET 값 = main10 ThreadA GET 값 = ThreadA10 가치를 ThreadB = ThreadB10
// 각 스레드는 각 스레드에 대한 별도의 변수를 저장, 여기에 기술되고, 내부 스레드의 ThreadLocal 값을 변경할 수있는 경우
// 우리가 필요로하는 종류를 추가 할 수있다, 여기에서 스트링 형 스레드 내부마다 인 의 ThreadLocal 값이 변경되었습니다
공공 클래스 실행을 {
// 验证线程变量的隔离性 공개 정적 ThreadLocal를 T1 = 새 의 ThreadLocal (); 공공 정적 무효 메인 (문자열 []에 args) { ThreadA = 새로운 ThreadA (); ThreadB B = 새로운 ThreadB (); a.start (); b.start (); } 정적 클래스 ThreadA는 확장 스레드가 { @Override 공공 무효 실행 () { 시도 { 에 대한 ( int로 , 내가 5 <나는 = 0 내가 ++ ) { t1.set ( "ThreadA"+ (I + 1 )); 에서 System.out.println ( "GET ThreadA 1 값 ="+ t1.get ()); 에서 System.out.println ( "GET ThreadA 2 값 ="+ t1.get ()); Thread.sleep를 ( 200 ); } } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } } } 정적 클래스 ThreadB는 확장 스레드 { @Override 공공 무효 실행 () { 시도{ 위해 ( int로 ; I <5, I = 0 난 ++ ) { t1.set를 ( "ThreadB"+ (I + 1 )); 에서 System.out.println는 ( "값을 얻을 ThreadB ="+ t1.get ()); Thread.sleep를 ( 200 ); } } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } } } } ThreadA 1 GET 값 = ThreadA1 ThreadA 2 GET 값 = ThreadA1 ThreadB GET 값 =ThreadB1 ThreadB 값을 얻을 = ThreadB2 ThreadA 1 개 GET 값 = ThreadA2 ThreadA 2 GET 값 = ThreadA2 ThreadB GET 값 = ThreadB3 ThreadA 1 개 GET 값 = ThreadA3 ThreadA 2 GET 값 = ThreadA3 ThreadA 1 개 GET 값 = ThreadA4 ThreadB GET 값 = ThreadB4 ThreadA 2 GET 값 = ThreadA4 ThreadA 1 개 GET 값 = ThreadA5 ThreadB GET 값 = ThreadB5 ThreadA 2 GET 값 = ThreadA5