zoukankan      html  css  js  c++  java
  • ThreadLocal应用及原理分析

    其实ThreadLocal早就有用过,原理也仅限于适用于多线程的同名变量,但其作用范围在单个线程内部,

    但是面试时这样回答没有说服力,看看别人怎么说的,“当某些变量是以线程为作用域,并且不同线程有不同的值时,用ThreadLocal比较合适”。

    一.用法

    1.一般来说在类中声明

    private static ThreadLocal<T> local = new ThreadLocal<T>();

    2.在Runnable中不能声明为静态

    private ThreadLocal<T> local = new ThreadLocal<T>();

    3.设置和获取变量值

    local.get();

    local.set(T);

    注意:在系统开发中,当前请求的用户信息一般来说都用ThreadLocal保存,但是会存在多个用户占用一个线程,

    如果第二个用户信息为null的话,就会自用第一个用户的信息,为避免这种情况,在用户信息为null时,

    local.set(null);

    二.原理

    因为适用于多线程,应该是作为一个static全局变量存在

    static Map<ThreadId,Map<ThreadLocal,Object>>

    ThreadId为线程ID,可以根据当前的线程ID获取当前线程的ThreadLocalMap.

  • 相关阅读:
    jsp 内置对象二
    jsp 内置对象(一)
    jsp04状态管理
    jsp03( javabeans)
    jsp05 指令与动作
    Maven搭建SpringMVC + SpringJDBC项目详解
    java 面向对象
    java 面向对象 2
    javaScript 进阶篇
    NSSet、NSMutableSet、NSOrderedSet、NSMutableOrderedSet
  • 原文地址:https://www.cnblogs.com/guoyinglin/p/13102841.html
Copyright © 2011-2022 走看看