java多线程之ThreadLocal类

Laughing
2021-06-06 / 0 评论 / 825 阅读 / 搜一下 / 正在检测是否收录...

ThreadLocal是⼀个本地线程副本变量⼯具类。内部是⼀个弱引⽤的Map来维护。这⾥不详细介绍它的原理,⽽是只是介绍它的使⽤,以后有独⽴章节来介绍ThreadLocal类的原理。

有些朋友称ThreadLocal为线程本地变量或线程本地存储。严格来说,ThreadLocal类并不属于多线程间的通信,⽽是让每个线程有⾃⼰”独⽴“的变量,线程之间互不影响。它为每个线程都创建⼀个副本,每个线程可以访问⾃⼰内部的副本变量。

ThreadLocal类最常⽤的就是set⽅法和get⽅法。

package com.company;

public class ThreadLocalDemo {

    static class ThreadA implements Runnable{

        private final ThreadLocal<String> threadLocal;

        public ThreadA(ThreadLocal<String> threadLocal){
            this.threadLocal=threadLocal;
        }

        @Override
        public void run() {
            threadLocal.set("A");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("ThreadA输出:" + threadLocal.get());
        }
    }

    static class ThreadB implements Runnable{

        private final ThreadLocal<String> threadLocal;

        public ThreadB(ThreadLocal<String> threadLocal){
            this.threadLocal=threadLocal;
        }

        @Override
        public void run() {
            threadLocal.set("B");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("ThreadB输出:" + threadLocal.get());
        }
    }

    public static void main(String[] args){
        ThreadLocal<String> threadLocal = new ThreadLocal<>();
        new Thread(new ThreadA(threadLocal)).start();
        new Thread(new ThreadB(threadLocal)).start();
    }
}
0

评论 (0)

取消
  1. 头像
    青云
    Windows 10 · Google Chrome

    感谢分享

    回复