ThreadLocal简单示例

/**
 *@author xiannger
 *
 *类说明:演示ThreadLocal的使用
 */
public class UseThreadLocal {

    /**
     * 可以理解为 一个map,类型 Map<Thread,Integer>
     */
    private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){
        //定义初始值
        @Override
        protected Integer initialValue() {
            return 1;
        }
    };

    /**
     * 运行3个线程
     */
    private void startThreadArray(){
        Thread[] runs = new Thread[3];
        for(int i=0;i<runs.length;i++){
            runs[i]=new Thread(new TestThread(i));
        }
        for(Thread t:runs){
            t.start();
        }
    }

    /**
     *类说明:测试线程,线程的工作是将ThreadLocal变量的值变化,并写回,
     * 看看线程之间是否会互相影响
     */
    public static class TestThread implements Runnable{
        int id;
        private TestThread(int id){
            this.id = id;
        }
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+":start");
            Integer s = threadLocal.get();//获得变量的值
            s = s+id;
            threadLocal.set(s);
            System.out.println(Thread.currentThread().getName()+":"
            +threadLocal.get());
        }
    }

    public static void main(String[] args){
        UseThreadLocal test = new UseThreadLocal();
        test.startThreadArray();
    }
}

执行结果:

Thread-0:start
Thread-0:1
Thread-2:start
Thread-2:3
Thread-1:start
Thread-1:2
全部评论

相关推荐

Z_eus:别打招呼直接发你的优势
点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务