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
全部评论

相关推荐

2024-12-21 10:42
已编辑
江西软件职业技术大学 Java
新宿站不停:该提升学历就提升学历,菜了就多练。没事找牛马公司虐自己是吧? 谁没事说自己“经验少”,这不自己把自己塞剎鼻hr嘴里找🐴吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务