
Java
文章平均质量分 66
mangoBUPT
爱玩,爱技术
展开
-
Java ThreadPoolExecutor 线程池总结
介绍线程池就是管理线程的池子,当有任务要处理时,不用频繁创建新线程,而是从池子拿个线程来处理。当任务执行完,线程并不会销毁,而是在等待下一个任务。因此可以节省资源,提高响应速度。 还可以提高线程的可管理性。execute()提交任务执行逻辑当有任务提交的时候,首先判断核心线程池是否已满,如果未满,创建核心线程执行任务,如果满了将任务添加到队列中,如果队列也满了,判断线程池是否已满,如果未满,创建非核心线程执行任务,如果已满,执行饱和策略。线程池的参数7个参数:饱和策略线程池的饱和策略主原创 2021-03-15 09:34:28 · 1081 阅读 · 1 评论 -
手撕Java-BIO-NIO
介绍最近学习了NIO,顺便复习了一下BIO,分别手写了阻塞和非阻塞的server和client端。Java BIOServerpublic 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 · 405 阅读 · 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 · 971 阅读 · 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 · 1640 阅读 · 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 · 1527 阅读 · 12 评论 -
深入理解Java类的初始化和实例化
介绍在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。抛砖引玉下面先来看一个例子吧先来看父类 Father.javapublic class Father { private int i = test(); static { Syste原创 2021-02-25 10:40:12 · 972 阅读 · 3 评论 -
详解Java单例模式
单例模式介绍概念单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。意图意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。原创 2021-02-24 17:58:37 · 2402 阅读 · 1 评论 -
构建Java中间件必备的基础知识
说之前谈两个之前一直有疑问的地方:反向代理和负载均衡有何区别?反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的web服务器。区别就是:反向代理服务器是需要存储资源的,让用户更快速的接收到资源。负载均衡就是,为了保证后端web服务器的高可用,高并发,是不需要要存储资源,只需要转发用户的请求。使用本地缓存的场景在程序中,有些表数据,数据很少,但是原创 2021-02-24 14:56:42 · 1280 阅读 · 0 评论 -
为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较
BigDecimal介绍BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。除了需要用BigDecim原创 2021-02-24 14:44:34 · 1046 阅读 · 1 评论 -
ThreadLocal实践与详解
概述ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。也就是说:将线程公有化变成线程私有化。应用和实践每个线程都需要一个独享的对象(比如原创 2021-02-23 08:47:52 · 1315 阅读 · 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 · 1355 阅读 · 0 评论 -
Java项目小bug
最近在一个项目测试的时候有一些小bug,总结一下以后提醒自己!!!日期格式问题项目中的日期是点击之后弹出一个日历的东西让用户选择;但如果用户硬是要输入不规则的字符串的话,就会报错。解决:校验字符串的格式是否是想要的日期格式public static boolean isValidDate(String str) { boolean convertSuccess=true; ...原创 2018-12-29 14:09:22 · 1619 阅读 · 0 评论 -
Java自定义注解
最近看项目代码的时候看到了前辈们的写的自定义注解,决定深入的学习一下自定义注解相关的知识。1 注解知识介绍1.1 注解的定义一般在项目中声明在annotation包中,声明用@interface表示public @interface BussinessLog { .........}1.2 元注解介绍元注解的作用就是负责注解其他注解。常见的有四种注解:1.2.1 @Inher...原创 2018-12-27 17:33:32 · 1627 阅读 · 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 · 1933 阅读 · 8 评论 -
Jackson的使用
介绍最近公司的竞技场项目中使用了jackson来进行java对象和json的相互转换下面来介绍一下jackson的简单使用引入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>原创 2021-02-22 11:58:26 · 1470 阅读 · 0 评论