ThreadLocal并不是一个Thread】的更多相关文章

ThreadLocal是什么? 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”.其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些. 当使用ThreadLocal维护变量时,Th…
每个线程都有一个ThreadLocalMap对象,ThreadLocalMap是Thread的一个内部类,可以把ThreadLocalMap理解成一个Map,这个Map里存放这一个Thread的所有线程变量. 在我们创建一个线程变量 maxLife 之后,执行其set方法,其实是以maxLife这个对象为键,以0为值,然后将这组键值对放入当前线程的ThreadLocalMap对象中. 如果你不明白这意味着什么,接着往下看. 为了说明ThreadLocal有什么不同,我们直接上代码. 首先,我们在…
Log4a 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块 github地址 : https://github.com/EalenXie/log4a 在API每次被请求时,可以在整个方法调用链路中记录一条唯一的API请求日志,可以记录请求中的任意内容,比如传参,响应,请求url,method,clientIp,请求成功或异常,等等,以及HttpServletRequest中的任意内容. 实现的核心为AOP以及ThreadLocal. AOP 会切所有被Log4a注解…
怎么在java中关闭一个thread 我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程.那么怎么关闭这个线程呢? 有人会说可以用Thread.stop()方法.但是这个方法已经被废弃了. 根据Oracle的官方文档,Thread.stop是不安全的.因为调用stop方法的时候,将会释放它获取的所有监视器锁(通过传递ThreadDeath异常实现).如果有资源该监视器锁所保护的话,就可能会出现数据不一致的异常.并且这种异常很难被发现. 所以现在…
https://www.jianshu.com/p/377bb840802f Thread类中维护了一个成员变量:ThreadLocalMap 每个Thread有一个自己的ThreadLocalMap,ThreadLocal在get和set时,会先通过getMap()获取当前thread的ThreadLocalMap: ThreadLocalMap的key和value分别是ThreadLocal实例的弱引用对象和我们要存储的值 ThreadLocalMap的enrty的key为什么要设置成弱引用…
大家应该知道,用户从发起请求,到服务器响应的这个过程中,在服务器中是在一个线程中的.如果我们吧查询出来的对象放到这个线程自己的缓存中,到用户请求结束时,把这些东西清理掉,应该是一个不错的cache方案. import java.util.HashMap; import java.util.Map; /** * ThreadLocalCache * */ public class ThreadLocalCache { /** * 实例字段,每个线程一个store,每个线程生产一个{@code Th…
boolean   flag=true;         public   void   run(){             while(flag){                     .......             }     }         上面是线程中的run方法,不干预则一直在线程循环中     停止只需要在外部改变flag=false,线程就自然终止了…
ThreadLocal继承Object,相当于没继承任何特殊的. ThreadLocal没有实现任何接口. ThreadLocal并不是一个Thread,而是Thread的局部变量…
一.前言 要理解ThreadLocal,首先必须理解线程安全.线程可以看做是一个具有一定独立功能的处理过程,它是比进程更细度的单位.当程序以单线程运行的时候,我们不需要考虑线程安全.然而当一个进程中包含多个线程的时候,就需要考虑线程安全问题,因为此时线程可能会同时操作同一个资源,当两个或者两个以上线程同时操作一个资源的时候,就会造成冲突.不一致等问题,即线程不安全. 解决线程安全问题,本质上就是解决资源共享问题,一般有以下手段: 1)可重入(不依赖环境):2)互斥(同一时间段只允许一个线程使用)…
一.概念 首先,ThreadLocal并不是一个Thread,这个类提供了线程局部变量,这些变量不同于它们的普通对应物,因为访问某个变量的每个线程都有自己的局部变量,它独立于变量的初始化副本. 二.基本原理 ThreadLocal是如何做到为每一线程维护变量的副本的呢?下面通过源码(jdk1.7版本)来阐述ThreadLocal的基本原理. 在具体分析之前,先做几点说明: 1:在TreadLocal中有一个静态内部类ThreadLocalMap static class ThreadLocalM…