zoukankan      html  css  js  c++  java
  • java面试-ThreadLocal

    线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。

    ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问时, 能保证各个线程的变量相对独立于其他线程内的变量。

    /**
     * @author chong.zuo
     * @date 2020/12/29 17:03
     *
     *  1.传递数据:通过ThreadLocal类在同一个线程不同组件中传递共享数据。
     *  2.线程隔离:ThreadLocal提供线程局部变量,每个线程变量都是独立的,不会相互影响。
     */
    public class ThreadLocalTest {
    
        static ThreadLocal<String> tl = new ThreadLocal<>();
    
        private String content;
    
        public String getContent() {
            String content = tl.get();
            return content;
        }
    
        public void setContent(String content) {
            tl.set(content);
            //this.content = content;
        }
    
        public static void main(String[] args) {
            ThreadLocalTest test = new ThreadLocalTest();
    
            for (int i = 0; i < 5; i++) {
    
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        test.setContent(Thread.currentThread().getName() + "的数据");
                        System.out.println("=====================================");
                        System.out.println(Thread.currentThread().getName() + "----->" + test.getContent());
    
    
                    }
                }, "thread" + i);
    
                thread.start();
                //解绑当前线程绑定的对象, 防止内存泄漏
                tl.remove();
            }
    
    
        }
    }

    ThreadLocal与volatile区别:

    volatile: 多线程访问共享变量的可见性, 线程内存变量副本对主内存变量的可见性。

    ThreadLocal: threadlocal类提供线程局部变量, 每个线程的变量都是独立的相互隔离的。

  • 相关阅读:
    shell 调试
    shell中的函数参数
    shell脚本执行的区别
    《C# 语言学习笔记》——C# 简介
    【SVN】SVN使用教程总结
    SVN Unable to connect to a repository at URL问题解决
    前后端分离(三)
    前后端分离(二)
    前后端分离(一)
    【git】Git的使用
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14183824.html
Copyright © 2011-2022 走看看