说到ThreadLocal的时候,很多人都能说出它的作用,用于存储线程的数据副本,使不同线程具有不同的数据。再谈到它的实现原理时,听到最多的就是说ThreadLocal内部维护着一个Map,这个Map的Key就是当前的Thread对象。按照这个思路,想当然的就是从ThreadLocal获取值的时候呢,通过内部的map.get(thread)获取。事实上真是这样实现的吗,翻开ThreadLocal源[……]

阅读全文

概述

jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。

用法

[root@centos7 ~]# jinfo -h
Usage:
    jinfo [option] &l[......]

阅读全文

如果想要进行正则的处理操作,那么首先需要对常用的正则标记有所掌握,从JDK1.4开始提供java.util.regex开发包,这个包里面提供有一个Pattern程序类类,在这个程序类里面定义有所有支持的正则标记。

1、 【数量:单个】字符匹配

任意字符:表示由任意字符组成;
\:匹配 “\”;
\n:匹配换行;
\t:匹配制表符;

2、【数量:单个】字符集(可以从里面任选一个字符)

[……]

阅读全文

在调用三方API时,对某些特殊的接口要求响应时间比较高,如果响应超时后可继续执行其它逻辑的处理方法。

public class LimitedTimeExecutor {

    private static final ExecutorService THREAD_POOL = Executors.newFixedThreadPool(1);

    class Task implemen[......]

阅读全文

概述

分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID(java生成的UUID中间带”-“),但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。

有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。

而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cas[……]

阅读全文

前言

使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,分析springboot是如何帮我们简化这个过程的。

springboot帮我们做了什么

通常搭建一个基于spring的web应用,我们需要做以下工作:

1、pom文件中引入相关jar包,包[……]

阅读全文