1. Java并发 - CountDownLatch

    CountDownLatch 的作用就是 允许 count 个线程阻塞在一个地方,直至所有线程的任务都执行完毕。 之前在项目中,有一个使用多线程读取多个文件处理的场景,我用到了 CountDownLatch 。具体场景是下面这样的:

    2021/09/27 concurrent

  2. Java并发 - AQS 原理分析

    AQS 的全称为(AbstractQueuedSynchronizer),是一个用来构建锁和同步器的框架, 内部实现的关键是维护了一个先进先出的队列以及state状态变量。先进先出队列的存储载体叫做 Node 节点,该节点标记着当前的状态值、独占/共享 模式、以及它的前驱和后驱节点 等信息。

    2021/09/27 concurrent

  3. Java并发 - Runnable

    开始写作吧 ![image-alter](/image/post/2021/09/27/05/xxx.jpg)

    2021/09/27 concurrent

  4. Java并发 - 线程池

    线程是一个重资源,JVM 中的线程与操作系统的线程是一对一的关系,所以在 JVM 中每创建一个线程 就需要调用操作系统提供的 API 创建线程,赋予资源,并且销毁线程同样也需要系统调用。 而系统调用就意味着上下文切换等开销,并且线程也是需要占用内存的,而内存也是珍贵的资源。 因此线程的创建和销毁是一个重操作,并且线程本身也占用资源。

    2021/09/27 concurrent

  5. Java并发 - ReentrantLock

    synchronized 和 ReentrantLock 的区别

    2021/09/27 concurrent

  6. Collection框架之ConcurrentHashMap

    Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作, 每一个 Segment 都是一个类似 HashMap 数组的结构, 它可以扩容,它的冲突会转化为链表。但是 Segment 的个数一但初始化就不能改变。

    2021/09/27 collection

  7. Java 集合目录

    代码模块 private static String postTitle = "Collection框架之ConcurrentHashMap"; private static String urlTitle = "jdk-ConcurrentHashMap"; private static String categories = "[collection]"; private static String tags = "[Java, collection]"; private static String folder = "java" + File.separator + "collection"+ File.separator + "content"; private static String number = "01";

    2021/09/27 collection

  8. Java cglib 代理

    JDK 动态代理有一个最致命的问题是其只能代理实现了接口的类,CGLIB 动态代理机制就可以避免这个限制。 CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB 通过继承方式实现代理。 很多知名的开源框架都使用到了CGLIB, 例如 Spring 中的 AOP 模块中:如果目标对象实现了接口, 则默认采用 JDK 动态代理,否则采用 CGLIB 动态代理。

    2021/09/26 proxy

  9. Java JDK 代理

    在静态代理中我们需要对哪个接口和哪个被代理类创建代理类,所以我们在编译前就需要代理类实现与被代理类相同的接口, 并且直接在实现的方法中调用被代理类相应的方法;但是动态代理则不同,我们不知道要针对哪个接口、 哪个被代理类创建代理类,因为它是在运行时被创建的。也就是:JDK静态代理是通过直接编码创建的, 而JDK动态代理是利用反射机制在运行时创建代理类的。

    2021/09/26 proxy

  10. Maven deploy 上传jar包到私服

    如果搭建了maven私服,那么需要将项目基础脚手架,或者依赖项目上传到私服,供其他人下载使用, 备份一下配置,后续快速复用~

    2021/09/18 Tools