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类提供线程局部变量, 每个线程的变量都是独立的相互隔离的。

  • 相关阅读:
    css !import
    算法
    java web 运动前端
    oauth 2
    js 优化
    js 代码优化 (写的可以)
    2015/08/17 《有两条均线,你应该注意》
    佳能相机操作 EDSDK 教程 C# 版本
    2015/8/14——了2000股,是否正确呢——明天待验证?
    系统架构师考试——程序计数器 PC, 指令寄存器IR、状态寄存器SR、通用寄存器GR
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14183824.html
Copyright © 2011-2022 走看看