ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个 完全独立的实例副本。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的 所有 ThreadLocal 相对的实例副本都可被回收。总的来说,ThreadLocal 适用于每个线程需要自己独立 的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。
Spring boot 和 Mybatis 搭配使用的范例已经很多了,多数据源的情况也有很多教程范例,但两者搭配 阿里巴巴的druid的资料不多,本文将搭建过程的关键步骤进行备份存档,以备使用。
如果项目中引用了 com.alibaba.druid-spring-boot-starter 这个jar包的 1.2.6 版本, 那么编译的时候会遇到找不到openJDK的问题,这是因为再druid的pom描述文件中,引用了本地定义的 openjdk路径,导致编译报错,具体原因和解决方案如下。
Git
maven Maven 相关基本操作 druid 1.2.6 依赖 openjdk 的问题 Maven deploy 上传jar包到私服的方法及其配置文件
content
Linux Linux用户和组管理 Linux系统权限控制基础 Linux系统shell脚本基础 Linux磁盘空间分析和删除日志文件 Linux排查进程和线程 Linux系统中自动检测并重启Java项目 Linux系统-grep指令
brew安装软件备份 # 备份 $ brew install htop $ brew tap Homebrew/bundle $ brew bundle dump $ mv Brewfile ~/cloud # 还原 $ brew bundle
在 JDK 1.2 版之前,Java 里面的引用是很传统的定义:如果 reference 类型的数据中存储的数值 代表的是另外一块内存的起始地址,就称该 reference 数据是代表某块内存、某个对象的引用。这种 定义并没有什么不对,只是现在看来有些过于狭隘了,一个对象在这种定义下只有“被引用”或 者“未被引 用”两种状态,对于描述一些“食之无味,弃之可惜”的对象就显得无能为力。譬如我们希望能描述一类对 象:当内存空间还足够时,能保留在内存之中,如果内存空间在进行垃圾收集后仍然非常紧张,那就可以 抛弃这些对象 —— 很多系统的缓存功能都符合这样的应用场景。
经过半个世纪的发展,今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化” 时代,但当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时, 就必须对这些“自动化”的技术实施必要的监控和调节。