ThreadLocal的使用

时间:2022-07-26
本文章向大家介绍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>

作者:彼岸舞

时间:2020916

内容关于:并发编程

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