随笔分类 - Java基础
摘要:SPI(Service Provider Interface) 服务提供发现接口。 不同于微服务中的服务发现,其本质是典型的面向接口编程,使用了策略模式,实现解耦。 同时SPI 使用的是一种 ”插件思维“,即服务提供者负责服务所有的维护,当替换服务提供方时不需要调用方修改代码及配置文件。 理解: 1
阅读全文
摘要:静态变量: 静态变量即类变量,在类中方法之外以statis关键字声明,类的所有对象之间共享。 静态变量在类加载连接阶段的准备阶段在方法区分配内存并设置类变量的初始值(类型的默认值),在首次使用时初始化赋予正确值。 静态变量一般都被声明为常量使用 (public static final),静态常量(
阅读全文
摘要:ChatGPT: 在Java中,有一些重试框架可以帮助处理在执行某些操作时可能发生的错误,并尝试重新执行这些操作。以下是一些常用的Java重试框架: Spring Retry: 特点: Spring Retry是Spring框架的一部分,提供了在方法执行失败时进行重试的机制。它通过注解或者编程方式来
阅读全文
摘要:这种方式适用于接收较多的参数,且其中有些参数是不能为空的,去校验不能为空的参数。 1、接收绑定请求参数到 @ResponseBody @RequestMapping(value = "saveContent", method = RequestMethod.POST) public ContentR
阅读全文
摘要:一、饿汉式 1、在static属性中实例化(类加载的初始化阶段实例化(在准备阶段分配内存)) 2、在static代码块中实例化(类加载的初始化阶段实例化) 3、枚举实现(https://www.cnblogs.com/yangyongjie/p/11056454.html) 二、懒汉式 1、同步方法
阅读全文
摘要:一、线程池 线程池适合处理的任务:执行时间短、工作内容较为单一。 合理使用线程池带来的好处: 1)降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的开销 2)提高响应速度:当任务到达时,任务可以不用等待线程创建就能立即执行 3)提高线程的可管理性:可以统一对线程进行分配、调优和监控 4)提供
阅读全文
摘要:并发编程的目的是为了充分利用资源让程度运行的更快,原则是,将代码中串行执行的部分变成并发执行。 并发:指多线程交替执行 / 并行:指同时执行 1、多线程面临的挑战 并发编程的目的是为了让程序运行的更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在使用多线程时需面临以下的几个挑战: 1)
阅读全文
摘要:Enum源码: Enum.java /* * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject
阅读全文
摘要:先复习Java中的异常 java.lang.Throwable 顶层父类 |– Error错误:JVM内部的严重问题,如OOM,程序员无法在代码中无法处理。 |–Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求程序员要进行处理。 |–RuntimeExceptio
阅读全文
摘要:前言 进程:进程是操作系统资源分配的最小单位 进程有自己的虚拟地址空间,这个空间包括了各种资源,例如堆、栈,各种段,它们其实都是虚拟地址空间的一块区域。所以说进程是资源分配的最小单位。 线程:线程是操作系统任务调度和执行的最小单位。 线程包含在进程之中,是进程中实际运作单位 协程:协程运行在线程之上
阅读全文
摘要:Lock Lock是顶层接口,它的实现逻辑并未用到synchronized,而是利用了volatile的可见性。 public interface Lock { /** * Acquires the lock.获取锁 * 如果锁不可用,则当前线程将被禁用以用于线程调度,并处于休眠状态,直到获得锁为止
阅读全文
摘要:一、 线程不安全验证: /** * SimpleDateFormat线程安全测试 * 〈功能详细描述〉 * * @author 17090889 * @see [相关类/方法](可选) * @since [产品/模块版本] (可选) */ public class SimpleDateFormatT
阅读全文
摘要:1、Lambda 表达式 Lambda表达式,也可称为闭包 Lamdba允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 ambda 表达式的语法格式如下: (parameters) -> expression 接收的参数->元素表达式 或 (parameters) ->{ stateme
阅读全文
摘要:Lock与Synchronized: 1、Synchronized无法判断是否获取锁的状态,Lock可以判断是否获取锁2、Lock中的某些锁允许对共享资源的并发访问,如ReadWriteLock读写锁,readLock()获取读锁,writeLock()获取写锁,读锁可以被多个线程获取,写锁只能有一
阅读全文
摘要:concurrent包下的类都有下面的实现模式1、首先,声明变量为volatile2、然后,使用CAS的原子条件更新来实现线程之间的同步3、配合使用volatile的写可见性和CAS的原子性来实现线程之间的通信(线程安全) 最近在看 java.util.concurrent.atomic 包下的At
阅读全文
摘要:可重入锁,持有锁的线程可以进入任何锁所同步的代码块 不可重入锁: public class Lock { private boolean isLock = false; /** * 同步方法 */ public synchronized void lock() throws InterruptedE
阅读全文
摘要:一、前言 如果每个线程在创建的时候都有个初始值,如每个线程都分配一个线程号;针对每个请求线程需要包含请求的参数等一些信息,所以可以构造这样一个对象,将这个对象设置为共享 变量,统一设置初始值,但是每个线程对这个值的修改都是相互独立的。这个对象就是ThreadLocal,可以理解为:CopyValue
阅读全文
摘要:自定义注解往往能够简化开发,当我们需要对某些类或者方法增加某些功能或者进行某些处理时,可以使用自定义注解做标注,减少代码侵入,实现低耦合。在自定义注解处理器中利用反射来完成想要的功能。 自定义注解一般需要根据实际使用定义一些成员变量(属性)。 注解解释: 自定义注解例子: 需求:在导出功能中,对一些
阅读全文
摘要:Synchronized(实例锁)和 static Synchronized(类锁)区别 实例锁:锁在某个对象上,如果该类是单例的,那么该锁也有全局锁的概念 类锁:该锁针对的类,无论实例多少个对象,那么线程都共享该锁。 Java的锁分为对象锁和类锁。 1. 当两个并发线程访问同一个对象object中
阅读全文
摘要:支持获取的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable 相同的功能规范,并且包括对应于 Hashtable 的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但获取操作不 必锁定,并且不 支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与 Hashtab
阅读全文