"Java multithreaded programming core technology" ---- ThreadLocal

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

 

Guess you like

Origin www.cnblogs.com/windy13/p/11318639.html