![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 79
少年做自己的英雄
奋斗吧 少年
展开
-
线程池如何实现的线程复用及源码分析
目录线程池创建流程图源码分析总结【精华】常见问题线程池创建流程图源码分析线程池核心类:ThreadPoolExecutor,其构造方法维护了很多线程池关键参数,比如:corePoolSize、workQueue、handler等等,其都是ThreadPoolExecutor类的成员变量。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSi.原创 2021-09-01 00:37:01 · 353 阅读 · 0 评论 -
Java NIO
Java磁盘数据读取模型数据存在磁盘中,磁盘控制器从磁盘中读取将其放入操作系统内核的缓冲区,然后Java程序从缓冲区中读取数据由于现在CPU处理速度的上升,整体的运行速度瓶颈已不在CPU,更多的是由I/O效率决定,而目前市面上所有操作系统已经将I/O性能改善到非常OK不会拖后腿,但由于Java虚拟机为了提供一个多系统统一的环境,其单方面屏蔽了操作系统在I/O上处理的优化。是JVM在I/O方面效率不足,导致的程序效率降低。在操作系统中,可以从硬件上直接读取大块的数据,而JVM只能从这些大块的.原创 2021-08-21 16:54:23 · 103 阅读 · 0 评论 -
Java常用锁及源码实现分析
常用锁乐观锁(无锁) Lock(显示锁) synchronized(内置锁)乐观锁实现方式:CAS(compare and swap:比较并交换),就是在更新一个变量之前,先获取这个变量是否和预期相等,如果相等则更新,否则什么也不做。例如:数据库更新:update user set name=xxx where xxx=xxx,只有当where符合条件才更新,否则什么也不做。 Atomic操作AtomicInteger底层源码我们在多线程并发i++时,通常会使用atomicIn原创 2021-06-28 01:18:08 · 442 阅读 · 1 评论 -
理解AQS(AbstractQueuedSynchronizer)源代码分析
java.util.concurrent.locks下public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {/** * The synchronization state. */ private volatile int state;}其继承的原创 2021-06-28 01:16:39 · 177 阅读 · 1 评论 -
synchronized锁的膨胀过程
在jdk1.6以前,随着并发数提高,synchronized吞吐量下降严重,而ReentrantLock则比较稳定,如果说ReentrantLock性能较强,那么synchronizedzeyuo原创 2021-06-20 20:55:41 · 703 阅读 · 0 评论 -
Java内存模型与线程
由于内存和CPU的读写速度有断崖式差距,于是在内存与CPU之间增加了一层高速缓存,以缓解CPU想要数据时内存供不应求的尴尬场面。在CPU需要时将使用到的数据复制到缓存中,提高运算速度,运算结束后将结果同步...原创 2021-06-20 15:18:00 · 227 阅读 · 0 评论 -
Java线程通信及线程虚假唤醒
线程在内部运行时,线程调度具有一定的透明性,程序通常无法控制线程的轮换执行。但Java本身提供了一些机制来保证线程协调运行。假设目前系统中有两个线程,分别代表存款和取钱。原创 2021-06-14 20:42:14 · 190 阅读 · 1 评论 -
jdk8新特性:Lambda表达式
Lambda表达式,又称为闭包或匿名函数,是jdk8的重要特性,可以使代码变的简单、优雅,增强代码可读性。用我们熟悉的Runnable,源代码就是一个简单的接口,里面有一个唯一的抽象方法:run()@FunctionalInterfacepublic interface Runnable { public abstract void run();}jdk7中我们实现run方法:public static void main(String[] args) { R原创 2021-05-10 23:24:54 · 187 阅读 · 5 评论 -
jdk8新特性:Optional使用介绍
Optional方法介绍方法名 方法介绍 方法声明 empty 创建一个空的Optional对象。调用isPresent返回false,调用get抛空指针异常 <T> Optional<T> empty() of 使用一个非空的值创建Optional对象。Optional.of(null)抛空指针异常 <T> Optional<T> of(T value) ofNullable 可使用任意值创建O...原创 2021-03-25 15:08:54 · 887 阅读 · 2 评论 -
SpringBoot向前端实时输出日志
传统的HTTP请求只能由客户端发起,而服务端要想给客户端源源不断的发送数据,必须由客户端不断的向服务端发起请求,Ajax轮询,这种方式显然更加浪费开销。WebSocket是HTML5提供的一种在单个TCP连接进行全双工的通信协议。浏览器和服务器只需要一个握手动作,就形成了一条快速通道,两者之间即可方便的数据持续互传,直到客户端或者服务器中的某一方主动关闭连接。使用Linux的tail -f读取服务器日志,在前端实时展示。添加依赖<dependency> <.原创 2020-12-28 20:00:03 · 3790 阅读 · 14 评论 -
SpringBoot配置自定义Servlet
目录一、前言二、准备工作三、开始配置配置文件配置注解自动扫描四、测试运行一、前言DispatcherServlet是SpringMVC处理请求的默认Servlet,当有需求自己写一个Servlet来处理请求,可有以下两种方式配置:(传统web.xml配置方式不做赘述。此处为SpringBoot配置方式)配置文件配置 注解自动扫描二、准备工作加入web依赖<dependency> <groupId>org.springfram原创 2020-11-20 16:16:12 · 1493 阅读 · 3 评论 -
Spring注解扫包依赖注入核心简单代码实现
传统配置Spring xml配置文件将Bean托管Spring容器。但由于配置的繁琐性,随着JDK5支持注解,Spring2.x版本后逐渐使用注解方式代替传统XML配置。现在开发的新项目惯于使用Spring扫包+注解的方式自动装配,托管于Spring容器。本篇文章基于上述内容,大致描述Spring新版本核心思想,代码只提炼精髓与关键点,且与源码大相径庭,复杂程度远不及源码的N分之一,仅供参考。原创 2020-11-20 15:31:47 · 395 阅读 · 1 评论 -
IDEA全局搜索Jar包中内容
目录一、下载源码二、搜索内容1、按文件名搜索2、全局关键字搜索想要搜索Jar中关键字,必须先把jar包源码下载下来,否则搜不到。一、下载源码Preferences --> Maven --> Importing,根据自己需求把Sources和Documentation勾选。然后打开右侧Maven窗口,点击以下两个按钮其中一个均可,下载项目所有jar源码。若不想下载全部,可以找到自己想要下载的jar,单击Download Sources二、搜索内原创 2020-11-16 10:34:26 · 33423 阅读 · 5 评论 -
idea使用lombok项目起不来问题解决
本篇文章建立在已经有lombok基础上进行问题排查,相关注解使用请自行百度。每次启动新项目的时候,因为时间隔得太久,总是忘记一些小点,导致项目启动失败。1、配置lombok的maven或者gradle百度maven,第一个点进去,搜索lombok。这个网站比较慢,而且经常挂~~也可去阿里云的仓库找依赖,不过版本一般都不是最新:https://maven.aliyun.com/mvn/search2、项目中加入依赖后,发现项目起不来,并且lombok注解不好使【需要安装lomb..原创 2020-07-31 15:12:44 · 1923 阅读 · 0 评论 -
log4j2.xml常用配置介绍(Log4j2配置文件)
一直对Log4j2的配置文件没有一个全局的清晰认识,于是去查看了官网文档,对常用配置做了一些官网的翻译和理解,整体配置文档议自官网:http://logging.apache.org/log4j/2.x/manual/configuration.html。目录一、配置文件框架二、XML配置三、配置详细介绍1、2、3、4、配置过滤器5、三、 log4j2.xml案例分析一、配置文件框架首先给出一个最简单的日志配置格式...原创 2020-07-02 14:22:00 · 14889 阅读 · 0 评论 -
下载安装配置gradle,并使用IDEA创建gradle项目(多模块)【SpringBoot】
构建gradle项目之前,一定要先配置好gradle,再进行构建,否则会发生意想不到的效果。一、安装配置gradle下载gradle首先去官网:https://gradle.org/releases/,然后下载自己想要的版本,这里选择最新版:下载后直接解压即可。配置环境变量(Mac实例):GRADLE_HOME为刚刚gradle的解压路径 GRADLE_USER_HOME为本地仓库路径,如果不配置 jar会存放在/Users/xxx/.gradle/caches/module.原创 2020-07-30 20:01:20 · 1436 阅读 · 0 评论 -
简述java类加载机制ClassLoader、双亲委派模型及类隔离加载
类加载器ClassLoader:用于将Java类加载到Java虚拟机中,其常用的有以下三种,当然除此之外还有用户自定义类加载器根加载器(Bootstrap) 扩展加载器 应用程序类加载器根加载器(BootstrapClassLoader):C++编写。JVM的核心加载器,随Java面世的第一版加载器。我们之所以安装好java,配置好环境变量,运行起java,就可以直接使用Object obj = new Object(),List list = new ArrayList()之类代码,是因原创 2020-06-09 00:20:51 · 975 阅读 · 0 评论 -
GC回收(JVM垃圾回收)机制、算法
1.GC回收机制熟悉么,分代算法知道么?2.了解 Java 虚拟机的垃圾回收算法? 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。 Major GC 是清理永久代。Full GC 是清理整个堆空间—包括年轻代和永久代。> Android GCAndroid GC 原理探究-http://geek.csdn.net/news/detail/193654>Java中的GC是什么? 为什么要有GC?GC目的:回收堆内存中不再使用的...转载 2020-05-26 14:07:10 · 346 阅读 · 0 评论 -
Error running 'api': Address localhost:1099 is already in use问题解决【本地明明没有占用此端口】
遇到问题Run:Error running 'api': Address localhost:1099 is already in use Debug:Error running 'api': Unable to open debugger port (127.0.0.1:50112)尝试方法lsof -i:1099 查找端口,没有【若有,杀死这个进程就可以了】 重启idea 重启...原创 2020-04-07 18:40:02 · 1753 阅读 · 0 评论 -
Maven生成可以直接运行的jar包的多种方式
Maven可以使用mvn package指令对项目进行打包生成jar文件,如果直接使用java -jar xxx.jar指令运行jar文件,会出现”no main manifest attribute, in xxx.jar”(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。要想jar包能直接通过java -jar xxx.jar运行,需要满...转载 2018-08-22 15:44:33 · 207 阅读 · 0 评论 -
JackSon和内部类,是的,你可以使用,但他们必须是静态的内部类
本文翻译于一片国外文章,原文链接如下:Tatu SalorantaJackSon和内部类,是的,你可以使用,但他们必须是静态的内部类。这是我直到今天没有意识到的东西:这显然是正确使用内部类在Java开发者社区的巨大的困惑。事实上有一些网页显示JackSon不能使用内部类值。这实际上是真实的和虚假的,原因就在于Java的内部类的特点。早在Java 1.1的时候就引入了内部类(为了使AW...转载 2018-09-25 20:30:21 · 1314 阅读 · 0 评论 -
Java:"失效"的private修饰符
本文主要介绍Java 失效的private修饰符,这里整理了相关资料说明private 修饰符的作用,如何使用并与C++ 做比较,有兴趣的小伙伴可以参考下在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的方法可以使用,其他的类都无法访问到这个private成员。上面描述了private修饰符的基本职能,今天来研究一下private功能失效的情况。J...转载 2018-09-26 10:26:00 · 213 阅读 · 0 评论 -
Springboot -- 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate 是 Spring 提供的用于访问Rest服务的客户端, RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。我之前的HTTP开发是用apache的HttpClient开发,代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,稍微截个图,这是我封装好的一个post请求工具: 本教程将带领大家实现Spring生态...转载 2018-10-26 11:13:46 · 766 阅读 · 0 评论 -
阿里云服务器部署SpringBoot项目
在个人windows系统下,部署项目分以下几步:(1)连接阿里云服务器(2)将本地java程序的prod配置文件参数配置为服务器的路径、数据库等(3)项目打包(4)项目部署运行(5)部署后访问遇到的问题及解决办法1、SpringBoot中使用jsp部署后无效2、部署后,linux中外部磁盘中静态文件无法获取。3、该进程已存在【若启动项目 出现 java.net....原创 2018-11-18 15:00:13 · 4933 阅读 · 0 评论 -
[java]_在程序运行过程中,根据属性名动态生成对象并赋值
在程序的运行过程中,我们可能需要根据一些给定字符串来动态生成实体;由于给定字符串每次都不相同,所以每次生成的实体对象的变量和值均不相同,依靠cglib包的一些方法可以将此功能实现。首先添加jar包:<dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep...原创 2019-02-13 15:06:36 · 4286 阅读 · 3 评论 -
Java递归获取某实体除特殊字段外,其他字段是否全部为null,特殊字段为空则为判断实体是否全部字段均为空
/** * 递归获取某实体除特殊字段外,其他字段是否全部为null * * 注意:1、不支持实体内含有基本数据类型的情况;2、不支持实体内部含有非静态内部类的情况;3、暂不支持除特殊字段外的其他字段为List的情况 * * @param object 需要判断的实体 * @param specialFieldSet 特殊字段(可以为null的字段) * @return...原创 2019-04-16 11:32:38 · 1247 阅读 · 0 评论 -
RabbitMQ相关概念及使用
相关概念解释virtual host【虚拟主机】:简称vhost,每一个vhost可以对应一个用户,拥有独立的队列、交换机等,且可以重复命名。生产者【Producer】:创建消息,并发送到RabbitMQ消费者【Consumer】:连接到RabbitMQ,并消费其中的消息队列【Queue】:RabbitMQ的唯一存储消息的数据结构,生产者创建消息并将消息投递到队列中,消费者从...原创 2019-07-17 13:38:34 · 276 阅读 · 0 评论 -
SpringBoot项目Mybatis连接MySQL以及前端访问文件配置
目录(一)SpringBoot项目前端访问文件配置:(1)访问html:(2)下面重点说访问jsp(二)SpringBoot项目Mybatis连接MySQL(一)SpringBoot项目前端访问文件配置:(1)访问html:在resources文件夹下,新建两个文件夹:static(放css、js、图片等静态文件)、templates(放html静态网页),但templ...原创 2018-08-05 18:16:21 · 7299 阅读 · 0 评论