TypechoJoeTheme

香草物语

统计
登录
用户名
密码
/
注册
用户名
邮箱
输入密码
确认密码

java多线程之ThreadLocal类

Laughing博主
2021-06-06
/
0 评论
/
770 阅读
/
147 个字
/
百度已收录
06/06
本文最后更新于2024年03月18日,已超过186天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

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)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

香草物语

本文链接:

https://www.xiangcaowuyu.net/java/threadlocal-class-of-java-multithread.html(转载时请注明本文出处及文章链接)

评论 (0)
  1. 青云 久住
    Windows 10 · Google Chrome

    感谢分享

    2021-06-08 回复