240 发简信
IP属地:上海
  • Guava监视器之Monitor

    前言:对于一个控制锁的业务场景来说,有简单的也有复杂的,最简单的就是判断一个对象是否是null。再复杂点就是对于一个复杂条件的判断。判断的话如果是一个boolean类型,gu...

  • JUC之玩转Condition

    每期总结一个小的知识点和相关面试题,嘿嘿,又来和大家共同学习了。 GUC中有个类我们用的比较少,但是他确是很多类中不可或缺的成员。他就是Condition。 从字面意思理解就...

  • 四种方法实现http服务

    前言:对于微服务来说,如果我们要实现一个web服务,大部分人可能直接用springboot的spring-boot-starter-web了。我们知道spring-boot-...

  • Redis内存满了会怎么样?

    Redis占用内存大小 1、通过配置文件配置 通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小 redis的配置文件不一定使用的是安装目录...

  • Object.wait() 和 LockSupport.park()的实现原理

    Object.wait() 在进行wait()之前,就代表着需要争夺Synchorized,而Synchronized代码块通过javap生成的字节码中包含monitoren...

  • 公平锁和非公平锁的区别

    在java的锁机制中,公平和非公平的参考物是什么,个人而言觉得是相对产生的结果而立,简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁。相反,如果保...

  • 读写锁的原理

    读写锁的使用 读写锁在 Java 中是 ReentrantReadWriteLock,使用方式是: ReentrantReadWriteLock和ReentrantLock的...

  • 120
    线程池源码研究

    前言:第一次写源码分析类文章,有点忐忑,还是硬着头皮上了。之前几篇线程池文章主要是讲解线程池使用场景,这篇文章我以非代码方式讲解源码,这个估计没人这么干过吧!哈哈。 说实话一...

  • volatile原理和使用场景

    volatile 关键字只能用于修饰变量,无法用于修饰方法。并且 volatile 只能保证可见性,但不能保证操作的原子性。 在具体编程中体现为:volatile 只能保证基...

  • synchronized几个小面试点

    synchronized的锁升降级 Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”, 所以在Java SE1.6里锁一共有四种状态...

  • 线程池如何传递ThreadLocal

    前言 在做分布式链路追踪系统的时候,需要解决异步调用透传上下文的需求,特别是传递traceId,本文就线程池透传几种方式进行分析。 其他典型场景例子: 分布式跟踪系统 或 全...

  • 线程池使用的N种姿势

    线程池在开发中一定会用到,如果能像golang一样,java语言也有协程,也许java程序员就少了一种包袱。 回归正题,我们聊下到底有哪些线程池的使用方式,总结有以下几种。 ...

  • 线程问题怎么排查

    线程状态的定义 可见在 JDK 中定义的线程状态总共六种,各状态在特定条件下可以转换,其组成了一个线程的生命周期,为了方便理解,对其状态和转换整理成了列表和状态图的形式。 状...

  • 线程池执行流程

    ThreadPoolExecutor介绍 通过 ThreadPoolExecutor 创建线程池,API 如下所示: 先来解释下其中的参数含义(如果看的比较模糊可以大致有个印...

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括两个阶段:“标记”和“清除”。 标记阶段:确定所有要回收的对...

  • G1 与 CMS 两个垃圾收集器的对比

    细节方面不同 G1 在压缩空间方面有优势。 G1 通过将内存空间分成区域(Region)的方式避免内存碎片问题。 Eden, Survivor, Old 区不再固定、在内存使...

  • 什么是JIT?怎么优化?

    什么是JIT JIT 是 just in time 的缩写, 也就是即时编译编译器。 在运行时 JIT 会把翻译过的机器码保存起来,以备下次使用,因此从理论上来说,采用该 J...