public class the Run { // class ThreadLocal variables are resolved between different threads of isolation, which is a different thread has its own value, // the value of different threads that can be placed in ThreadLocal be saved. public static the ThreadLocal T1 = new new the ThreadLocal (); public static void main (String [] args) { IF (t1.get () == null ) { System.out.println ( "never let value" ); T1. the SET ( "my value" ); } System.out.println (t1.get ()); System.out.println (t1.get ()); // never let the value // I value //I value } }
// threadlocal demonstrated herein correspond to the same target, different threads, are isolated between threads // threads B and a thread, while modifying threadlocal, do not affect each other public class the Run { // validation thread variable isolation public static T1 = the ThreadLocal new new the ThreadLocal (); public static void main (String [] args) { in ThreadA A = new new in ThreadA (); and that ThreadB B = new new and that ThreadB (); a.start (); b.start (); the try { for ( int I = 0; I <10; I ++ ) { t1.set ( "main" + (. 1 + I)); System.out.println("main get value = " + t1.get()); Thread.sleep(200); } } catch (InterruptedException e) { e.printStackTrace(); } } static class ThreadA extends Thread { @Override public void run() { try { for (int i = 0; i < 10; i++) { t1.set("ThreadA" + (i + 1)); System.out.println("ThreadA get value = " + t1.get()); Thread.sleep(200); } } catch (InterruptedException e) { e.printStackTrace(); } } } static class ThreadB extends Thread { @Override public void run() { try { for (int i = 0; i < 10; i++) { t1.set("ThreadB" + (i + 1)); System.out.println("ThreadB get value = " + t1.get()); Thread.sleep(200); } } catch (InterruptedException e) { e.printStackTrace(); } } } } main get value = main1 ThreadA get value = ThreadA1 ThreadB get value = ThreadB1 ThreadB get value = ThreadB2 ThreadA get value = ThreadA2 main get value = main2 main get value = main3 ThreadB get value = ThreadB3 ThreadA get value = ThreadA3 ThreadA get value = ThreadA4 ThreadB get value = ThreadB4 main get value = main4 ThreadA get value = ThreadA5 ThreadB get value = ThreadB5 main get value = main5 main get value = main6 ThreadB get value = ThreadB6 ThreadA get value = ThreadA6 main get value = main7 ThreadB get value = ThreadB7 ThreadA get value = ThreadA7 ThreadA get value = ThreadA8 ThreadB get value = ThreadB8 main get value = main8 ThreadA get value = ThreadA9 ThreadB get value = ThreadB9 main get value = main9 main get value = main10 ThreadA get value = ThreadA10 ThreadB get value = ThreadB10
// described here, each thread stored separate variable for each thread, and if the internal thread can be changed threadlocal value
// we can add the type in which we need, here is the string type, inside a thread, every time threadlocal values have changed
public class the Run {
// 验证线程变量的隔离性 public static ThreadLocal t1 = new ThreadLocal(); public static void main(String[] args) { ThreadA a = new ThreadA(); ThreadB b = new ThreadB(); a.start(); b.start(); } static class ThreadA extends Thread { @Override public void run() { try { for (int i = 0; i < 5; i++) { t1.set("ThreadA" + (i + 1)); System.out.println("ThreadA 1 get value = " + t1.get()); System.out.println("ThreadA 2 get value = " + t1.get()); Thread.sleep(200); } } catch (InterruptedException e) { e.printStackTrace(); } } } static class ThreadB extends Thread { @Override public void run() { try { for (int i = 0; i < 5; i++) { t1.set("ThreadB" + (i + 1)); System.out.println("ThreadB get value = " + t1.get()); Thread.sleep(200); } } catch (InterruptedException e) { e.printStackTrace(); } } } } ThreadA 1 get value = ThreadA1 ThreadA 2 get value = ThreadA1 ThreadB get value = ThreadB1 ThreadB get value = ThreadB2 ThreadA 1 get value = ThreadA2 ThreadA 2 get value = ThreadA2 ThreadB get value = ThreadB3 ThreadA 1 get value = ThreadA3 ThreadA 2 get value = ThreadA3 ThreadA 1 get value = ThreadA4 ThreadB get value = ThreadB4 ThreadA 2 get value = ThreadA4 ThreadA 1 get value = ThreadA5 ThreadB get value = ThreadB5 ThreadA 2 get value = ThreadA5