java ThreadLocal

ThreadLocal是什么

定义:提供线程局部变量;一个线程局部变量在多个线程中,分别有独立的值(副本)

特点:简单(开箱即用)、快速(无额外开销)、安全(线程安全)

场景:多线程场景(资源持有、线程一致性、并发计算、线程安全等场景)

ThreadLocal基本API 

  • 构造函数 ThreadLocal<T>()
  • 初始化 initialValue()
  • 服务器 get/set
  • 回收 remove

使用 Synchronized

1@RestController 2public class StartController { 3 4 static Integer c = 0; 5 6 synchronized void __add() throws InterruptedException { 7 Thread.sleep(100); 8 c++; 9 } 10 11 @RequestMapping("/stat") 12 public Integer stat() { 13 return c; 14 } 15 16 @RequestMapping("/add") 17 public Integer add() throws InterruptedException { 18 //Thread.sleep(100); 19 //c++; 20 __add(); 21 return 1; 22 } 23 24}

使用ThreadLocal

1@RestController 2public class StartController { 3 4 static ThreadLocal<Integer> c = new ThreadLocal<Integer>() { 5 @Override 6 protected Integer initialValue() { 7 return 0; 8 } 9 }; 10 11 void __add() throws InterruptedException { 12 Thread.sleep(100); 13 c.set(c.get() + 1); 14 } 15 16 @RequestMapping("/stat") 17 public Integer stat() { 18 return c.get(); 19 } 20 21 @RequestMapping("/add") 22 public Integer add() throws InterruptedException { 23 __add(); 24 return 1; 25 } 26 27}

参考文章:https://www.yuque.com/gaohanghang/vx5cb2/wnvbvd#Fs5Am

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

spring中,在Java任何位置获取request对象

看RequestContextListener和RequestContextHolder源代码不难看出,是用过ThreadLocal实现的。ThreadLocal是什么呢?看词义,它并非是一个线程,它不是一个Thread,而是一个线程局部变量,其实功能非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而

ThreadLocal源码分析

最近在学多线程并发的知识,发现好像ThreadLoca还挺重要,决定看看源码以及查找各方资料来学习一下。ThreadLocal能够提供线程的局部变量,让每个线程都可以通过set/get来对这个局部变量进行操作,不会和其它线程的局部变量进行冲突,实现了线程的数据隔离。首先是ThreadLocal的结构:每个Thread维护一个ThreadLocalMap,这个

最常见的java面试题汇总

1.什么是线程局部变量?(答案)线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何

Java ThreadLocal的内存泄漏问题

ThreadLocal提供了线程独有的局部变量,可以在整个线程存活的过程中随时取用,极大地方便了一些逻辑的实现。常见的ThreadLocal用法有:\存储单个线程上下文信息。比如存储id等;\使变量线程安全。变量既然成为了每个线程内部的局部变量,自然就不会存在并发问题了;\减少参数传递。比如做一个trace工具,能够输出工程从开始到结

Java多线程与并发之ThreadLocal原理解析

1\.ThreadLocal是什么?使用场景ThreadLocal简介ThreadLocal是线程本地变量,可以为多线程的并发问题提供一种解决方式,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,