自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 Java多线程之ThreadLocal的使用

ThreadLocal不是一个Thread,而是一个Thread的局部变量,当使用ThreadLocal维护变量的时候,ThreadLocal会为每个使用该变量的线程提供一个独立的副本,每个线程都可以修改该副本,而不会影响到其它的副本。ThreadLocal构造方法构造函数,空的,什么事情都没有做public ThreadLocal() {}初始化方法初始化方法,是一个protected方法,显然是为了让子类覆盖的,该方法不会在ThreadLocal创建的时候调用,而是会在线程第一次调用ge

2021-01-09 15:34:37 108

原创 Java注解的使用

Annotation, 也叫元数据, JDK1.5引入, 与类,接口,枚举属于同一层次。可以声明在包/类/字段/方法/局部变量/方法参数等前面, 用来对这些元素进行说明。本质其实就是一个Annotation接口。元注解用来注解其他注解的注解,称为元注解。元注解一共有5个,分别是@Retention、@Target、@Document、@Inherited和@Repeatable。@RetentionRetention英文意思有保留、保持的意思,它表示注解存在阶段是保留在源码、字节码还是运行期(JV

2021-01-08 13:42:47 94

原创 mybatis缓存的使用

w

2021-01-07 09:29:21 100

原创 Java异常相关面试题

error和exception有什么区别?error是由Java虚拟机生成并抛出,大部分时间与编写的程序无关exception是程序可以处理的,可以避免发生的throw 与 throws 的区别是什么?throw 使用的位置在方法中,后面跟的异常对象实例,表示抛出异常throws 使用的位置在方法参数小括号后面,后面跟的是一个或者多个异常类名且用逗号隔开,表示抛出异常并交给调用者去处理final, finally, finalize的区别?final用于声明属性,方法和类,分别表示属性不

2021-01-06 17:05:02 89 1

原创 Java异常之Exception

Error是程序无法处理的错误,Exception是程序可以处理的异常,异常分为两类,运行时异常和编译异常。异常类型运行时异常都是RuntimeException类及其子类,例如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,

2021-01-06 16:54:28 78

原创 Java异常之Error

Error对象是由Java虚拟机生成并抛出,大部分时间与编写的程序无关。例如当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError,这个时候虚拟机一般会选择终止线程。常见子类错误类描述AbstractMethodError当应用试图调用抽象方法时抛出Asserti断言失败ClassCircularityError在初始化一个类时,若检测到类之间循环依赖则抛出该错误ClassFormatError当Java虚拟机试图从一个文件中读

2021-01-06 16:35:14 206 1

原创 Java异常之Throwable

异常和错误的顶级父类,只有对象是Throwable或其子类的实例时,才能抛出异常。它有两个比较重要的子类Error和Exception。重要属性# 存储异常的详细信息private String detailMessage;# 为另一个Throwable对象,存储异常发生的原因private Throwable cause = this;为什么要使用类型为Throwable的cause来存储异常的原因?因为当一个异常发生时,通常引发异常的上级程序也发生异常,从而导致一连串的异常产生,叫作异常

2021-01-06 16:15:36 199

原创 责任链模式(Java)

将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。代码简单实现abstract class Handler { # 指向下一个处理器 private Handler next;

2021-01-06 14:01:07 259 2

原创 mybatis的简单使用

mybatis 是一个优秀的基于java的持久层框架。内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。入门案例导入依赖<!--mybatis--><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version

2021-01-05 18:19:48 53

原创 springboot自带日志框架logback的简单使用

springboot默认日志框架是Logback,是由log4j创始人设计的另一个开源日志组件,内核进行了重写,性能提高了,初始化内存更小了。查看springboot官方文档Application Properties# 这句话告诉我们可以在资源目录创建logback.xml自定义配置日志管理规则Location of the logging configuration file. For instance, classpath:logback.xml for Logback.创建日志配置文件r

2021-01-04 18:19:59 472

原创 代理模式(Java)

代理模式属于结构型设计模式,它主要是在不改变原始类代码的情况下,通过引入代理类给原始类附加功能。JDK动态代理interface IUserService { void add();}class UserServiceImpl implements IUserService { @Override public void add() { System.out.println("user add ...... "); }}class JDKLo

2021-01-04 11:47:11 102 3

原创 装饰器模式(Java)

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。该设计模式是使用组合替代继承的具体实现。使用装饰器模式不修改图形绘制类的情况下增加绘制颜色的功能/* * 绘制图形 */ interface Shape { void draw();}class Rectangle implements Shape { @Override public void dra

2021-01-04 10:47:56 100

原创 Java锁之ReentrantLock的简单使用

Lock

2021-01-03 18:11:40 434

原创 Java锁之Synchronized的简单使用

只要使用多线程就可能存在多个线程共享同一段代码的问题,也就是线程安全的问题。那怎么解决线程安全问题?给共享资源加锁就是其中的一种解决方法,synchronized

2021-01-03 15:51:20 80

原创 建造者模式(Java)

建造者模式属于创建型设计模式,该模式使用多个简单的对象一步一步构建成一个复杂的对象。什么时候使用建造者模式创建一个对象,最常用的就是new关键字调用类的构造函数来完成,但是当构造函数的参数非常多的时候,代码的可读性和易用性就会变差,这个时候我们就可以使用建造者模式。简单使用class Mobile { private final String cpu; //处理器必须 private final int memory; //内存必须 private final boolea

2021-01-03 14:15:30 70

原创 工厂模式(Java)

工厂模式属于创建型模式,可细分为简单工厂、工厂方法、抽象工厂三种。简单工厂下面以配置文件解析器的例子来看看简单工厂模式的简单使用/* * 配置文件解析器接口 */ interface ConfigParser {}/* * xml文件配置解析器 */ class XmlConfigParser implements ConfigParser{}/* * json文件配置解析器 */class JsonConfigParser implements ConfigParse

2021-01-03 13:35:17 100 1

原创 JVM类加载器ClassLoader

Java Classloader是Java Runtime Environment的一部分,负责动态加载Java字节码文件到Java虚拟机的内存空间中。类加载过程加载通过类的全限定名来获取该类的二进制字节流把二进制字节流转化为方法区的运行时数据结构在堆上创建一个java.lang.Class对象,用来封装类在方法区数据结构,并向外提供访问方法区内部数据结构的接口加载方式从本地文件系统、jar等归档文件中加载将Java源文件动态编译为class网络下载、从专有数据库中加载等验证校

2021-01-03 10:44:48 106 1

原创 Java线程池ThreadPoolExecutor的简单使用

什么时候使用线程池1.服务器接收大量请求时2.需要创建5个以上的线程时, 就可以使用线程池来管理ThreadPoolExecutor# 构造函数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, Time

2021-01-01 17:14:57 109

原创 Java多线程的简单使用

使用多线程的利与弊因为CPU的速度远远大于内存和硬盘的速度,所以使用多线程可以充分利用CPU,减少CPU等待时间,让程序响应更快;但是多线程也会带来上下文切换的开销,并且这种开销并不廉价,所以如果没有必要,我们需要尽量减少上下文切换的开销。什么什么是上下文切换?当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执

2020-12-31 17:33:58 71

原创 单例模式(Java)

简介单例模式是最常用最简单的模式之一,属于创建型模式,实现该模式的类创建自己的对象,同时确保只有单个对象被创建。饿汉式类加载的时候就初始化,线程安全,实现比较简单class Singleton { //类加载的时候就会初始化 private static final Singleton instance = new Singleton(); //私有化构造函数,使不能通过构造方法创建对象 private Singleton() { } //只能通过该静态方法获取实例

2020-12-31 16:15:06 91 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除