摘要: 在Java中,我们想在程序运行时调用其方法,可以用JDK提供的反射相关API来实现,代码如下: Class clazz = Demo.class; Method method = clazz.getMethod("studyHard", new Class[]{String.class}); Dem 阅读全文
posted @ 2023-11-07 14:45 mingshan 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 最近看JDK11的CompletableFuture源码实现时,发现内部使用了Treiber stack,维基百科上作以下描述: The Treiber stack algorithm is a scalable lock-free stack utilizing the fine-grained 阅读全文
posted @ 2023-11-07 14:44 mingshan 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 在前面的文章中总结了二叉树的一些操作,提供了二叉树前中后的递归和非递归的实现。在非递归的实现中,基本思想是利用栈来模拟递归调用遍历的过程,本质上和递归实现没有区别,空间复杂度为\(O(n)\)。是否存在一种算法,它不使用栈也不破坏二叉树结构,但是可以完成对二叉树的遍历?即: 空间复杂度为\(O(1) 阅读全文
posted @ 2023-11-07 14:42 mingshan 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 反射是Java语言中一个比较重要的特性,它允许对正在运行的Java进行观测,甚至动态修改程序,即在运行态,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。 反射API介绍 获取Class对象 通常来说,使用反射API的第一步是获取Class对象,在J 阅读全文
posted @ 2023-11-07 14:38 mingshan 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 链表作为一种数据结构我们是比较熟知的,相对数组来说插入和删除操作性能比较高,因为数组涉及到移位操作,但数组可以利用二分法进行快速查找,而在链表中想要获取当前元素,就必须知道该元素的上一个节点(头节点除外),这就限制了链表在查找操作的性能,试想有没有一种数据结构,在链表基础上也能实现类似二分查找这样较 阅读全文
posted @ 2023-11-07 14:34 mingshan 阅读(29) 评论(0) 推荐(0) 编辑
摘要: ReentrantLock源码学习 - 释放锁(unlock) 上次谈到了利用ReentrantLock的非公平和公平加锁方式,那么接下来看看释放锁的流程 首先调用ReentrantLock的unlock方法 public void unlock() { sync.release(1); } 然后会 阅读全文
posted @ 2023-11-07 14:31 mingshan 阅读(9) 评论(0) 推荐(0) 编辑
摘要: ReentrantLock 学习 - 获取锁(JDK 1.8) ReentrantLock 提供非公平锁与公平锁两种加锁方式, 默认加锁方式为非公平锁。 ReentrantLock类的结构为: 从图中可以看出,ReentrantLock类包含三个静态内部类: Sync NonfairSync Fai 阅读全文
posted @ 2023-11-07 14:31 mingshan 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 生产者消费者问题是一个常见而且经典的问题,相信了解过多线程或者消息队列的同学对这个名词并不陌生。正如Java常用的设计模式一样,生产者消费者问题是为了解决某一类问题而存在,参阅维基百科对Producer–consumer problem的描述: In computing, the producer– 阅读全文
posted @ 2023-11-07 14:29 mingshan 阅读(26) 评论(0) 推荐(2) 编辑
摘要: 前面我们总结了Java虚拟机的监控及诊断工具(命令行)相关命令的使用,用命令行虽然说比较方便,但不够直观,要是有图形显示JVM运行的一些情况就好了。eclipse MAT 和 Java Mission Control 是两个使用比较广泛的GUI虚拟机的监控及诊断工具,下面让我们来用用吧。 Eclip 阅读全文
posted @ 2023-11-07 08:53 mingshan 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 对于普通的开发人员来说,可以阅读帮助文档或者源码来对JDK的设计以及JVM的内存管理获取一定的了解,但对于线上运行的程序,如何对程序进行监控和诊断呢?比如一个程序挂了,怎么通过分析堆栈信息、GC日志、线程快照等信息来快速定位问题?JDK的大佬早就为我们考虑到这一点,所以在JDK中包含了许多用于监控及 阅读全文
posted @ 2023-11-07 08:52 mingshan 阅读(101) 评论(0) 推荐(0) 编辑