![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码
文章平均质量分 68
分析程序源码
Zxy_true
低调的抗压的伙夫兄弟
展开
-
动态编译,自定义类加载器加载成功Demo
/1. 获取 `JavaCompiler` 实例 JavaCompiler compiler = ToolProvider . getSystemJavaCompiler();//信息收集器 DiagnosticCollector < JavaFileObject > collector = new DiagnosticCollector < >();原创 2023-07-13 11:52:16 · 212 阅读 · 0 评论 -
动态编译(基于内存)DEMO
给出基于内存的java动态编译demo代码原创 2023-07-11 16:55:19 · 261 阅读 · 2 评论 -
ThreadLocal原理
地址跳转原创 2021-11-29 21:01:30 · 110 阅读 · 0 评论 -
ThreadPoolExecutor 参数详解
跳转链接原创 2021-11-29 19:37:59 · 213 阅读 · 0 评论 -
Thread通过run()方法和start()方法启动的差别
结论Thread.run方法会直接调用传入的Runnable对象的run方法,也就是说此时的Thread相当于一个静态代理,从而并没有通过创建一个线程的方式去执行run方法,方法的执行还是在原来的线程。通过Thread.start()方法去执行时,会调用本地方法start0()去创建一个线程,此时采用动态代理的方式去调用传入的Runnable的run方法,即通过创建一个线程的方式去执行任务。源码Thread的run方法: /** * If this thread was cons原创 2021-11-24 11:38:26 · 193 阅读 · 0 评论 -
AQS的实现分析
一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。二、框架它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里vol转载 2021-11-23 18:12:02 · 143 阅读 · 0 评论 -
SynchronousQueue
今天看了无锁且没有容量没有队列的这个变态的锁:SynchronousQueue。他的特性就是没有容器,也没有锁:存数据线程在到达队列时,若发现没有取数据的线程,就在那里一直等待,一直等待有取数据的线程过来唤醒,取走数据,才会释放。反之亦然。整个实现都是通过CAS实现。他的源码真的是非常的不好阅读,主要本人涉及到栈、链表的结构的操作不是很熟悉,对照着其他大牛的分析,一步步走Debug来研读,大致摸清了思路。下面来分析一下源码SynchronousQueue的创建先来看下构造器// 默认创建非公转载 2021-11-22 20:08:40 · 127 阅读 · 0 评论 -
HashMap、HashSet源码分析
HashSet源码分析1、基本结论1.1、底层实现1.2、基本机制2、源码分析2.1、插入元素2.2 resize()源码分析1、基本结论1.1、底层实现HashSet是由HashMap实现的,而HashMap是一个个键值对的集合,因此HashSet中的值作为HashMap的key,而自动new一个Object对象最为HashMap的value,这个Object的引用是静态常量的引用类型,所以整个内存仅存在一个Object,意味着所有的Set对应于HashMap中的value都是这个Object。因此原创 2021-11-08 21:58:13 · 367 阅读 · 0 评论 -
ArrayList 扩容源码分析
ArrayList1、ArratList无参构造器形式初始容量是0,加入第一个数据时容量设置为10,随后每次到达容量都会按当前容量的1.5倍扩容。2、arraylist指定容量的构造方式创建则初始容量是指定的容量,而后面每次到达容量上限都会按1.5倍扩容。源码:在ArrayList中,使用一个Object类型的数组实现对元素进行保存。首先编写测试代码: List<Integer> list = new ArrayList<>(); for (int i原创 2021-09-30 20:50:38 · 133 阅读 · 0 评论 -
代理模式,静态代理与动态代理区别、各自实现,以及动态代理的源码分析
一、什么是代理代理就是我们指定一个工具类,这个类作为服务申明(一个接口)和服务具体实现(继承这个接口并实现方法)的第三者,它也实现这个服务接口,同时需要把这个服务具体实现放入其中,但是实现该服务的方法时,通过调用这个服务具体实现的方法,同时在该方法前后提供额外的增强服务来提高服务的力度,从而实现方法的增强。二、静态代理概念:所谓静态代理就是上述的代理的实现由我们自己手动实现,在新增服务的时候需要在这个代理中心手动增加代理服务的实现者并在后面实例化代理调用它,下面是一个例子:需求:现在需要两个服务原创 2021-09-23 13:27:10 · 257 阅读 · 0 评论 -
关于String在内存的表示和intern方法
内存String 字符串的存储位置在JAVA7之后存储在堆空间中的字符串常量池中。而此前是存储在永久区之中。(java8之后jvm中的方法区的实现时元空间,而此前是永久区)不同创建方式在内存的位置String str = "this is str"; 这种方式通过字面量的方式创建一个字符串,此时会直接在堆的常量池中创建此字符串(如果之前已经创建过了,由于字符串的不变性,会使用之前的那个)。String str2 = new String(“this is str”); 这种方式会在堆空间中创建一个原创 2021-09-29 16:44:52 · 149 阅读 · 0 评论