zoukankan      html  css  js  c++  java
  • ThreadLocal理解

    ThreadLocal:线程本地变量

    意思就是:每个线程都拥有自己的ThreadLocal。实际上是,不同的线程可以通过同一个ThreadLocal对象获取只属于自己的数据。其实是,ThreadLocal通过每个Thread内部的ThreadLocalMap实现了这个机制。

    set & get

    使用地方有:

    • Android的消息循环机制(Looper Handler MessageQueue)就是基于这个。
    • ...

    实例:

    public class Main {
        static final ThreadLocal<String> mThreadLocal = new ThreadLocal<>();
        public static void main(String[] args) {
            new Thread("thread1") {
                @Override
                public void run() {
                    mThreadLocal.set("value1");
                    try {
                        Thread.sleep(4000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(currentThread().getName() + " localValue:" + mThreadLocal.get());
                }
            }.start();
    
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
            new Thread("thread2") {
                @Override
                public void run() {
                    mThreadLocal.set("value2");
                    System.out.println(currentThread().getName() + " localValue:" + mThreadLocal.get());
                }
            }.start();
    
        }
    }
    

    输出:

    thread2 localValue:value2
    thread1 localValue:value1
    

    虽然是同一个ThreadLocal对象,而且都调用的同样的set get方法,但是get方法返回的值,一定是与当前线程对应的。

    线程的ThreadLocal机制实际是一套类似Map键值对的机制。

    每个Thread拥有一个以ThreadLocalMap属性。

    ThreadLocalMap

    ThreadLocal的内部类。是以ThreadLocal的hash值为数组下标,Entry元素为值的Entry数组。

    Entry

    ThreadLocalMap的内部类。继承WeakReference<ThreadLocal<?>>,它持有ThreadLocal的弱引用,保存ThreadLocal.set(value)传入的value

  • 相关阅读:
    winform只允许一个应用程序运行
    IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法
    C#ToString() 格式化数值
    SQLServer2008只能编辑前面200行数据
    Validform验证时可以为空,否则按照指定格式验证
    js操作cookie
    div z-index无论设置多高都不起作用
    Tableau 练习题
    Tableau可视化操作
    Tableau 基础
  • 原文地址:https://www.cnblogs.com/jiy-for-you/p/7282055.html
Copyright © 2011-2022 走看看