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

  • 相关阅读:
    JVM调优总结(八)-典型配置举例2
    JVM调优总结(七)-典型配置举例1
    ajax---异步请求对象的属性和方法
    ajax----发送异步请求的步骤
    ajax---获取XMLHttpReuquest 对象
    ajax--参数默认值问题
    ajax--参数映射方式实现阴影效果
    ajax-简单参数方法实现阴影效果
    ajax之阴影效果实现(对象函数方法)
    ajax对象方法的使用
  • 原文地址:https://www.cnblogs.com/jiy-for-you/p/7282055.html
Copyright © 2011-2022 走看看