随笔分类 - Java
摘要:有些场景中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效。 比如王者里面的小兵,只需创建一个小兵的原型,之后就只需要进行克隆复制就行了。 一、定义 原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型类必须实现cl
阅读全文
摘要:今天来说一下同样属于创建型模式的单例模式,相信这个模式普遍都清楚,因为平时在编码的时候都会进行相应的使用,我这边就当做日志记录一下。免得以后忘了还得去搜,我发现我记忆里非常差,很多东西很快就忘记了,年纪大了没办法。 一、定义 保证一个类仅有一个实例,并提供全局访问点。就是打死也不会生成第二个实例。一
阅读全文
摘要:一、定义 将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。 类似组将一台电脑,有主机、屏幕、鼠标、键盘等,你将这些组件的型号给组装店说好,他就会根据你的需求组装电脑,但是你不会看见具体的组装过程。建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加
阅读全文
摘要:工厂相关模式有两种,分别是: (1)工厂方法模式 (2)抽象工厂模式 接下来分别说下这两种工厂模式: 一、工厂方法模式 (1)定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 其实就是专职专产,比如某条产品线就只生产一种产品。 (2)实例
阅读全文
摘要:上一篇聊了一下Semaphore信号灯的用法及源码,这一篇来聊一下CyclicBarrier的用法及解析。 官网解释: 允许一组线程全部等待彼此达到共同屏障点的同步辅助。循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用
阅读全文
摘要:官方解释: 一个计数信号量。在概念上,信号量维持一组许可证。如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它。每个release()添加许可证,潜在地释放阻塞获取方。但是,没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。信号量通常用于限制线
阅读全文
摘要:CountDownLatch是JUC包下的一个工具类,允许一个或多个线程等待,直到其他线程中执行的一个放行操作完后,等待线程才会继续往下执行的同步辅助。 可用于一个或多个线程中等待其他线程完成某项操作后再运行的场景。 首先看一下其用法:1、先创建一个CountDownLatch的实例 参数是计数器(
阅读全文
摘要:上一篇简略说了一下Synchronized和Lock,今天就来说一下Java的锁机制。 Java的锁机制主要分为四种,分别是 (1)公平锁、非公平锁 (2)可重入锁 (3)自旋锁 (4)共享锁、独占锁 接下来一一说一下这四种锁 一、公平锁、非公平锁 (1)公平锁:指多个线程按照申请锁的顺序来获取锁,
阅读全文
摘要:锁是用来在多线程并发阶段保障数据同步的重要手段,防止出现脏数据,加锁代码在某个时间点只能由一个线程运行,其他线程等待。 普遍熟知的锁是synchronized关键字和Lock类。 一、synchronized关键字 这个在同步中是最常用的,分成对象锁和类锁,可以对方法和代码块进行加锁。 1、对象锁,
阅读全文
摘要:之前粗略看了一下List和Map,今咱来聊一下Set。 主要看以下几个: (1)HashSet (2)Collections.synchronizedSet (3)LinkedHashSet (4)CopyOnWriteArraySet (5)TreeSet 一、HashSet HashSet是日常
阅读全文
摘要:聊一下Map。主要有以下几个类: (1)HashMap (2)Hashtable (3)ConcurrentHashMap (4)LinkedHashMap (5)WeakHashMap 环境是java8,上述hashMap和ConcurrentHashMap在java7的时候实现会有不同。 Map
阅读全文
摘要:开始看一下集合Collection,List是Collection的一个子接口,主要是看一下其下的几个类。 1、AbstractList 2、ArrayList 3、Collections.synchronizedList 4、Vector 5、LinkedList 6、CopyOnWriteArr
阅读全文
摘要:JDK动态代理是代理模式的一种,且只能代理接口。spring也有动态代理,称为CGLib,现在主要来看一下JDK动态代理是如何实现的? 一、介绍 JDK动态代理是有JDK提供的工具类Proxy实现的,动态代理类是在运行时生成指定接口的代理类,每个代理实例(实现需要代理的接口)都有一个关联的调用处理程
阅读全文
摘要:前两篇对es的操作只是在开发或生产环境中排查问题需要大量使用,最常用的还是在代码中对es的增删改查,下面就来看一下。 引入依赖: 先定义一下常量: 一、TransportClient 对es的操作是通过TransportClient的,需要先创建TransportClient 二、索引 对索引的操作
阅读全文
摘要:上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是将编译过后的Class文件加载到内存中。 需要注意的是,即使是同一个类,类加载器不一样,就必定不相等
阅读全文
摘要:日常敲码中,如果想要在程序运行阶段访问某个类的所有信息,并支持修改类的状态或者行为的话,肯定会用到反射,而反射靠的就是Class类。Java的动态代理也用到了这个东西,所以了解其基本操作在苦逼的CRUD中会添加一丝丝乐趣(有点意思)。 首先来看看Class的操作有哪些? public final c
阅读全文
摘要:今天来看一下Thread和ThreadLocal类的源码。 一、Thread (1)首先看一下线程的构造方法,之后会说每种参数的用法,而所有的构造函数都会指向init方法 //空构造创建一个线程 Thread() //传入Runnable对象创建一个线程 Thread(Runnable target
阅读全文
摘要:CAS算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。 上篇文章讲到CAS会出现一个ABA问题。那什么是ABA问题呢? 官方一点的解释就是:当有多个线程对一个原子类进行操作的时候,某个线程在短时间内将原子类的值A修改为B,又马上将其修改为A,
阅读全文
摘要:本篇看一下Volatile关键字和原子引用。 上图就是JUC包结构,总共分成三块 (1)java.util.concurrent:并发包基础类,包括阻塞队列,线程池相关类,线程安全Map等。 (2)java.util.concurrent.atomic:原子引用相关类 (3)java.util.co
阅读全文
摘要:JVM垃圾回收机制是java程序员必须要了解的知识,对于程序调优具有很大的帮助(同时也是大厂面试必问题)。 要了解垃圾回收机制,主要从三个方面: (1)垃圾回收面向的对象是谁? (2)垃圾回收算法有哪些? (3)垃圾收集器有哪些?每个收集器有什么特点。 接下来一一讲解清楚: 一、垃圾回收面向的对象
阅读全文

浙公网安备 33010602011771号