ThreadLocalのテスト

4643 ワード

package com.ddc.mem;



public class ThreadLocalTestMain {

    ThreadLocal<AddInteger> localArgs=new ThreadLocal<AddInteger>();

    AddInteger intance=new AddInteger();

    public void mainTest(){

        for(int i=0 ;i<10;i++){

            ThreadTest thread=new ThreadTest(i);

            thread.start();

            try {

                Thread.sleep(10000);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }



    class ThreadTest extends Thread {

        public ThreadTest(int name) {

            this.setName("DdcThread-"+name);

        }



        @Override

        public void run() {

            localArgs.set(intance);

            intance.inc(100);

            for(int i=0;i<30;i++){

                AddInteger intThis=localArgs.get();

                intThis.inc(1);

                System.out.println(this.getName()+":"+intThis);

                try {

                    Thread.sleep(1000);

                } catch (InterruptedException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

}

    

    /**

     * @param args

     */

    public static void main(String[] args) {

        ThreadLocalTestMain main=new ThreadLocalTestMain();

        main.mainTest();

    }

    



}



class  AddInteger {

    private int i=0;

    public void inc(int inc){

        i=i+inc;

    }

    public int getI(){

        return i;

    }

}

 
私の理解は、ThreadLocalは実際にはIdentityHashMapに相当し、そのkeyは現在のスレッドであり、valueは現在のスレッド呼び出しsetメソッドが設定した値である.