![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 78
冥oo迹
这个作者很懒,什么都没留下…
展开
-
当单例模式碰上序列化
当单例模式碰上序列化一、问题如下二、解决办法三、原理剖析 3.1 对象反序列化 3.2 枚举反序列化问题如下单例模式:public class MmSingleton implements Serializable { private MmSingleton() { if (INSTANCE != null) { //预防AccessibleObject.setAccessible通过反射机制调用私有构造器 t原创 2021-05-31 09:29:39 · 103 阅读 · 0 评论 -
IDEA中的并发调试
IDEA中的并发调试一、介绍二、进入非主线程的调试三、挂起整个虚拟机四、重现错误介绍 最近看葛一鸣了的"实战高并发程序设计"一书,里面有一章介绍了"并行程序调试",不过书中是基于Eclipse编辑器的,这里总结一下IDEA中的调试方法,大同小异。 实验样本如下:/** * 两个线程都过了数组大小检查,先后插入数据时 引起 java.lang.ArrayIndexOutOfBoundsException */public class UnsafeArrayList原创 2021-04-19 09:22:05 · 1763 阅读 · 0 评论 -
JDK动态代理使用及原理解析
JDK动态代理使用及原理解析一、动态代理的使用 1.1 动态代理简单示例 1.2 创建代理实例在代理类中 1.3 公用的代理类二、如何进入到代理类中的invoke的? 2.1 拿到$Proxy0这个类 2.2 $Proxy0的解析三、Proxy.newProxyInstance是如何生成一个代理对象然后返回的?一、动态代理的使用1.1 动态代理简单示例 动态代理类图如下: 主体和实际主体代码如下所示:/** * 主体 */public in原创 2021-03-29 09:15:11 · 199 阅读 · 0 评论 -
线程池探索之扩展篇
线程池探索之扩展篇一、线程工厂的使用二、拒绝策略的使用三、线程池中的线程数量四、线程池的扩展五、线程池的堆栈调试线程工厂的使用 我们先看看ThreadPoolExecutor类构造方法中,默认采用的线程工厂Executors.defaultThreadFactory(),其创建了默认的线程工厂,如下:public static ThreadFactory defaultThreadFactory() { return new DefaultThreadFactory()原创 2021-03-16 09:06:58 · 152 阅读 · 0 评论 -
乱码产生的原因
乱码产生的原因一般有两种: 一种是解析错误;另一种是在错误解析的基础上加上了编码转换。(1)解析错误 比如一个GB2312编码的文件,使用UTF-8来打开,就会出现乱码。 这种情况下,只需要使用正确的编码方式即可解读。很多编辑器都有这个功能,如下图中的NotePad++:(2)错误的解析和编码转换 使用编辑器如何改变编码方式都不对时,很有可能是文本在错误解析的基础上,还进行了编码转换。如下例子: 发送方以GBK编码发送,而接收方以UTF-8解码时,原创 2021-02-28 21:15:01 · 9873 阅读 · 0 评论