ThreadLocal的使用

package org.dance.day1;

import org.dance.tools.SleepTools;

/**
 * ThreadLocal 的使用
 * @author ZYGisComputer
 */
public class UseThreadLocal {

    /**
     * 声明ThreadLocal并设置初始值
     */
    static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){
        @Override
        protected Integer initialValue() {
            return 1;
        }
    };

    /**
     * 启动线程组
     */
    public void startThreadArray(){
        Thread[] runs = new Thread[3];
        for (int i = 0; i < runs.length; i++) {
            runs[i] = new Thread(new TestThread(i));
        }
        for (int i = 0; i < runs.length; i++) {
            runs[i].start();
        }
    }

    /**
     * 测试线程:线程的工作是将ThreadLocal变量的值变化,并写回,看看线程之间是否会互相影响
     */
    public static class TestThread implements Runnable{

        int id;

        public TestThread(int id){
            this.id = id;
        }

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+" start!");
            SleepTools.ms(100);
            // 从ThreadLocal中获取值
            Integer integer = threadLocal.get();
            integer = integer+id;
            threadLocal.set(integer);
            System.out.println(Thread.currentThread().getName()+":"+threadLocal.get());
        }
    }

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

threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据.

线程变量,可以理解为是个Map Map<Thread,Integer>

作者:彼岸舞

时间:2020\09\16

内容关于:并发编程

本文来源于网络,只做技术分享,一概不负任何责任

posted @ 2020-09-16 09:57  彼岸舞  阅读(358)  评论(0编辑  收藏  举报