随笔分类 - Java
摘要:一、java9新特性 java9新增了很多特性,我们针对较为突出的便于理解的特性进行说明。除了下面罗列出的新特性之外还有一些其他的内容,这些内容有的不重要或者使用较少,所以没有罗列出来。 1.1 接口私有方法 在jdk9中新增了接口私有方法,即我们可以在接口中声明private修饰的方法了,这样的话
阅读全文
摘要:一、代理模式 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身,以控制对这个对象的访问。即通过代理对象访问目标目标对象,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 代理模式主要有三种形式,分别是静态代理、动态代理(也称JDK代理、接
阅读全文
摘要:一、概述 虚拟线程(Virtual Threads)是轻量级线程,可以减少编写、维护和调度高吞吐量并发应用程序的工作量。 1.1 内部线程实现模式 线程是可供调度的最小处理单元,它与其他类似的处理单元并发运行,并且在很大程度上是独立运行的。线程有两种: 绿色线程(Green Thread):远古时期
阅读全文
摘要:一、概述 ScopedValue是基于结构化并发理念在JDK20中被孵化的一个功能,它显然不是为了取代ThreadLocal出现的,而是能让结构化并发中的虚拟线程也能各自享有外部的变量。其实结构化并发中也可以使用ThreadLocal,但是ThreadLocal本身存在一些很大的问题: 可变,任何运
阅读全文
摘要:一、概述 Java语言作为一种静态强类型语言,在设计过程中必须平衡类型安全、灵活性以及代码的可复用性。泛型机制便是Java在1.5版本中引入的强大工具,旨在实现类型安全的集合操作及代码的通用化。 什么是泛型?为什么要使用泛型? 泛型即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用
阅读全文
摘要:一、简介 函数式接口是Java中的一个特殊接口类型,它只定义了一个抽象方法。尽管函数式接口中只能有一个抽象方法,但它可以有多个默认方法或静态方法。通过这种接口,Java支持将行为抽象为一个单独的函数,并能够通过lambda表达式或方法引用简洁地表示这些行为。 1.1 定义 @FunctionalIn
阅读全文
摘要:一、RMI 1.1 概念 RMI是用Java在JDK1.2中实现的,它大大增强了Java开发分布式应用的能力,Java本身对RMI规范的实现默认使用的是JRMP协议。而在Weblogic中对RMI规范的实现使用T3协议 JRMP:Java Remote Message Protocol,Java远程
阅读全文
摘要:一、概述 Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。 java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用
阅读全文
摘要:一、概述 Hashtable是一个比较古老的Map实现类,从它的名称就可以看得出来,因为没有遵循Java的语言规范。它和HashMap很像,同属于散列表,有以下特性: 线程安全,这也估计算是唯一一个优于HashMap的特性了吧; Hashtable不允许key或者value为null; 自从JDK1
阅读全文
摘要:一、概述 理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了extends Object关键字。 Object类属于java.lang包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。Objec
阅读全文
摘要:一、概述 Collections工具类提供了大量针对Collection和Map的操作,都为静态(static)方法,总体可分为四类: 排序操作 查找、替换操作 同步控制 设置不可变(只读)集合 二、排序操作 Collections提供以下方法对List进行排序操作: void reverse(Li
阅读全文
摘要:一、概述 String类的一个最大特性是不可修改性,而导致其不可修改的原因是在String内部定义了一个常量数组,因此每次对字符串的操作实际上都会另外分配分配一个新的常量数组空间。 二、创建字符串对象的方式 2.1 四种方式 方式一:直接赋值(常用) // 直接赋值方式创建对象是在方法区的常量池 S
阅读全文
摘要:一、概述 SPI(Service Provider Interface),是JDK内置的一种服务注册与发现的机制,通过解耦服务提供者与服务使用者,实现了服务创建 & 服务使用的关注点分离。用来启用框架扩展和替换组件,这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。
阅读全文
摘要:一、多线程概述 1.1 进程和线程概述 进程:操作系统中的应用程序,一个进程就是一个应用程序。进程A和进程B的内存独立不共享资源。 线程:CPU调度的最小单元,进程的一个执行流/指定单元,一个进程可以有多个线程。 PS:Java程序启动的时候,JVM就是一个进程,JVM会执行main方法,main方
阅读全文
摘要:一、关键字汇总 访问控制:private、protected、public、default 修饰符:class、abstract、extends、implements、interface、final、strictfp、static、synchronized、transient、volatile、na
阅读全文
摘要:一、概述 对于Java中的对象,我们只能使用基本运算符==、!=来判断一下地址是否相等,不能使用>、<来比较大小。但是在实际的开发中,我们需要对对象进行排序,也就是比较大小,那么应该如何实现呢? 确定两个对象之间的大小关系及排列顺序称为比较,能实现这个比较功能的类或方法称之为比较器,在java中有两
阅读全文
摘要:一、简述 Vector的操作单线安全,加入了同步代码块,多线程安全(但不绝对),可以看成线程安全版本的ArrayList(其实也不绝对,在使用还是会加锁操作)。 相比于ArrayList其效率低,因为加入了synchronized操作。 二、源码分析 2.1 成员变量 在Vector的源码中,其成员
阅读全文
摘要:多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题——死锁。 一、什么是死锁 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace),若无外力作用,这些进程(线程)都将无法向前推进。 下面我们通过一些实例来
阅读全文
摘要:一、概述 EnumMap是一个用于存储key为枚举类型的map,底层使用数组实现(K,V双数组)。下面是其继承结构: public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V> implements java.io.Ser
阅读全文
摘要:一、概述 EnumSet是一个抽象类,不能直接使用,该类有两个子类,RegularEnumSet和JumboEnumSet。即枚举值的个数小于等于64时使用RegularEnumSet,大于64时使用JumboEnumSet。 这两个子类都是非public的,只能包内访问。 当EnumSet需要进行
阅读全文

浙公网安备 33010602011771号