Java基础
文章平均质量分 88
两个小垃圾
这个作者很懒,什么都没留下…
展开
-
动态代理、JDK动态代理、CGLIB动态代理,从例子理解动态代理
代理模式 代理模式的主要作用是不想在原有的类上做扩展,所以可以借助一个代理类来调用原有类的方法,然后将扩展内容在代理类中进行扩展(增强)。其中代理对象起到调用者和目标类之间的一个桥梁作用(类似于中介)。 动态代理更为灵活,无需对每个需要扩展的类(目标类)单独创建一个代理类,也不要我们实现目标类的接口,可以直接代理实现类。 从jvm角度理解,动态代理是运行时动态生成字节码文件,并加载入jvm中。 java中主要有两种动态代理方法,一种jdk动态代理,另一种就是CGLib动态代理。原创 2022-04-19 11:13:27 · 341 阅读 · 0 评论 -
手撕单例模式——彻底搞懂饿汉式、懒汉式、静态内部类、枚举实现单例,以及通过反射和反序列化破坏单例
单例模式的实现主要可以通过饿汉式、懒汉式(DCL)、静态内部类以及枚举实现。其中饿汉式、懒汉式、静态内部类皆可以通过反射或序列化的方式破坏单例,而枚举可以有效的防止反射破坏单例。注意:单例中的构造是私有的,只有私有构造器才能防止外部类轻易通过构造方法来创建实例,从而破坏单例。饿汉式单例模式所谓饿汉式就是直接在实例初始化时,便调用构造方法来创建单例。public class Hungry { private Hungry(){ } private final static原创 2021-10-02 21:27:11 · 620 阅读 · 0 评论 -
线程安全解决方式
线程安全解决方式同步代码块(1)操作共享数据的代码,即为需要被同步的代码;(2)共享数据:多个线程共享共同操作的变量,比如:ticket就是共享数据(下面代码中的例子)(3)同步监视器,俗称锁,任何一个类的对象,都可以充当锁;锁的要求:(多个线程必须公用一个锁,即同一个类的一个对象)通过实现Runnable接口的方式来创建线程:public class Mythread implements Runnable{ private int ticket = 100; O原创 2020-09-30 09:24:43 · 132 阅读 · 0 评论