![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 67
mangoBUPT
爱玩,爱技术
展开
-
Java ThreadPoolExecutor 线程池总结
介绍 线程池就是管理线程的池子,当有任务要处理时,不用频繁创建新线程,而是从池子拿个线程来处理。 当任务执行完,线程并不会销毁,而是在等待下一个任务。 因此可以节省资源,提高响应速度。 还可以提高线程的可管理性。 execute()提交任务执行逻辑 当有任务提交的时候,首先判断核心线程池是否已满,如果未满,创建核心线程执行任务,如果满了将任务添加到队列中,如果队列也满了,判断线程池是否已满,如果未满,创建非核心线程执行任务,如果已满,执行饱和策略。 线程池的参数 7个参数: 饱和策略 线程池的饱和策略主原创 2021-03-15 09:34:28 · 1009 阅读 · 1 评论 -
手撕Java-BIO-NIO
介绍 最近学习了NIO,顺便复习了一下BIO,分别手写了阻塞和非阻塞的server和client端。 Java BIO Server public class BIOServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(18686); Socket socket = serverSocket.a原创 2021-02-26 11:24:32 · 351 阅读 · 1 评论 -
一篇看懂ConcurrentHashMap中put方法的逻辑
ConcurrentHashMap的put方法 源码及注释如下: public V put(K key, V value) { return putVal(key, value, false); } final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) throw new NullPointerException(); // hash原创 2021-02-26 11:23:21 · 907 阅读 · 0 评论 -
一篇看懂HashMap中put方法的逻辑
HashMap的put方法 下面来看一下put方法的源码(详细注释): public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] t原创 2021-02-26 11:22:33 · 1551 阅读 · 3 评论 -
Java异常处理的十条建议
前言 Java异常处理的十个建议,希望对大家有帮助~ 一、尽量不要使用e.printStackTrace(),而是使用log打印。 反例: try{ // do what you want }catch(Exception e){ e.printStackTrace(); } 正例: try{ // do what you want }catch(Exception e){ log.info("你的程序有异常啦,{}",e); } 理由: printStackTrace()打原创 2021-02-25 10:43:13 · 1462 阅读 · 12 评论 -
深入理解Java类的初始化和实例化
介绍 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。 抛砖引玉 下面先来看一个例子吧 先来看父类 Father.java public class Father { private int i = test(); static { Syste原创 2021-02-25 10:40:12 · 903 阅读 · 3 评论 -
详解Java单例模式
单例模式介绍 概念 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 意图 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。原创 2021-02-24 17:58:37 · 2346 阅读 · 1 评论 -
构建Java中间件必备的基础知识
说之前谈两个之前一直有疑问的地方: 反向代理和负载均衡有何区别? 反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的web服务器。 区别就是: 反向代理服务器是需要存储资源的,让用户更快速的接收到资源。 负载均衡就是,为了保证后端web服务器的高可用,高并发,是不需要要存储资源,只需要转发用户的请求。 使用本地缓存的场景 在程序中,有些表数据,数据很少,但是原创 2021-02-24 14:56:42 · 1219 阅读 · 0 评论 -
为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较
BigDecimal介绍 BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。 很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。 所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。 除了需要用BigDecim原创 2021-02-24 14:44:34 · 987 阅读 · 1 评论 -
ThreadLocal实践与详解
概述 ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。 ThreadLocal是一个关于创建线程局部变量的类。 通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。也就是说:将线程公有化变成线程私有化。 应用和实践 每个线程都需要一个独享的对象(比如原创 2021-02-23 08:47:52 · 1239 阅读 · 2 评论 -
Java实现web文件下载
Springboot controller实现 输入想要下载文件的path,来实现文件的下载 package com.wgl.download.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; im...原创 2018-12-20 10:55:17 · 1303 阅读 · 0 评论 -
Java项目小bug
最近在一个项目测试的时候有一些小bug,总结一下以后提醒自己!!! 日期格式问题 项目中的日期是点击之后弹出一个日历的东西让用户选择;但如果用户硬是要输入不规则的字符串的话,就会报错。 解决:校验字符串的格式是否是想要的日期格式 public static boolean isValidDate(String str) { boolean convertSuccess=true; ...原创 2018-12-29 14:09:22 · 1570 阅读 · 0 评论 -
Java自定义注解
最近看项目代码的时候看到了前辈们的写的自定义注解,决定深入的学习一下自定义注解相关的知识。 1 注解知识介绍 1.1 注解的定义 一般在项目中声明在annotation包中,声明用@interface表示 public @interface BussinessLog { ......... } 1.2 元注解介绍 元注解的作用就是负责注解其他注解。 常见的有四种注解: 1.2.1 @Inher...原创 2018-12-27 17:33:32 · 1572 阅读 · 0 评论 -
Java使用iTextPDF生成PDF文件
iText介绍和说明 因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮。 如果你想通过java操作PDF文件,那么 iText 绝对是你的首选。 引入依赖 这里使用的是iText5 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId&原创 2021-02-22 12:00:45 · 1863 阅读 · 8 评论 -
Jackson的使用
介绍 最近公司的竞技场项目中使用了jackson来进行java对象和json的相互转换 下面来介绍一下jackson的简单使用 引入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>原创 2021-02-22 11:58:26 · 1417 阅读 · 0 评论