Java

ThreadLocal引发的灾难

Java

ThreadLocal引发的灾难

在 Java 里有个称之为线程本地变量的类型叫做 ThreadLocal,它与 ThreadLocal 之于 C# 中是一样的作用,可以在线程范围内设置变量,这个变量只会在当前线程可被访问,但是它们有一点不同的是,在 Java 中,当你设置好变量后,在线程使用完毕回到线程池之前,需要手动调用 ThreadLocal.remove() 方法去清除线程本地变量,否则变量随着线程回到线程池,并且在下次使用此线程时此变量继续存在,而在 C# 中,线程回到线程池时会自动清除本地变量,因此无需手动去清除。 我们的业务有这样一个场景:某个业务 UserService 类中,具有多个方法会频繁(甚至循环)调用一个获取用户标签的接口,具体原因是因为某些方法会进行递归,数据结构有个树状结构,因此,为了优化接口响应时间以及看起来不那么蠢,我使用 ThreadLocal 将用户标签接口的返回数据存储到当前线程,因为在单个请求中,多次调用此接口获取数据是不必要的,它看起来像这样: /** * 此静态变量ThreadLocal会为每个线程创建本地副本, 因此USER_TAGS_THREAD_

By FatTiger
使用VS Code进行Java开发

Java

使用VS Code进行Java开发

前言 目前有很多小伙伴在用IntelliJ IDEA,这东西啥都好,就是贵,再一个就是占用内存很高,打开它也觉得非常的重。如果跟我一样有上面几个问题困扰,可以尝试使用VS Code。它插件众多,能DIY的地方也很多,特别是对于喜欢折腾的人来说,更是福音。当然如果不喜欢折腾想上手即用也可,全家桶插件非常方便。 支持的Java版本范围 为什么要单开一段说这件事,原因在于目前不少人认为VS Code只能支持Java 11及以上版本,这对于很多使用Java 1.8开发的同学来说简直劝退。但这其实是个误解,目前VS Code是能支持Java 1.5 - Java 15(截止本文发布时的最新版本),基本能满足目前90%以上的Java使用者了(太老的Java版本这边移步Eclipse),至于说只能支持Java 11这件事,是指插件的运行环境需要安装最低Java 11的SDK,也就是说你如果想用VS Code开发Java程序必须要在本地安装Java 11 SDK才能够使用此插件。具体情况移步: * Language Support for Java(TM)

By FatTiger