- 博客(216)
- 资源 (8)
- 收藏
- 关注
原创 有三个线程T1,T2,T3,如何保证顺序执行?
在多线程中有多种方法让线程按特定顺序执行,你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成。实际上先启动三个线程中哪一个都行, 因为在每个线程的run方法中用join方法限定了三个线程的执行顺序。这些方法都可以用来确保线程按照指定顺序执行。选择其中一种方式取决于你的具体需求和场景。
2024-09-24 22:19:12 228
原创 判断线程池任务执行完成的方式
Thread线程是否执行完成,我们可以调用join方法然后等待线程执行完成;那在使用线程池的时候,我们如何知道线程已经执行完成了?本文就带给大家。
2024-09-24 21:58:42 771
原创 线程到底设置数量多少合适的探讨
一个极端的线程(不停执行“计算”型操作时),就可以把单个核心的利用率跑满,多核心CPU最多只能同时执行等于核心数的“极端”线程数如果每个线程都这么“极端”,且同时执行的线程数超过核心数,会导致不必要的切换,造成负载过高,只会让执行更慢I/O 等暂停类操作时,CPU处于空闲状态,操作系统调度CPU执行其他线程,可以提高CPU利用率,同时执行更多的线程I/O 事件的频率频率越高,或者等待/暂停时间越长,CPU的空闲时间也就更长,利用率越低,操作系统可以调度CPU执行更多的线程。
2024-01-12 10:23:41 1050
原创 JDK8 新特性
创建一个新的线程,指定线程要执行的任务代码分析:Lambda表达式是一个匿名函数,可以理解为一段可以传递的代码Lambda表达式的优点:简化了匿名内部类的使用,语法更加简单。匿名内部类语法冗余,体验了Lambda表达式后,发现Lambda表达式是简化匿名内部类的一种方式。Lambda省去了面向对象的条条框框,Lambda的标准格式由3个部分组成:格式说明:练习无参无返回值的Lambda定义一个接口然后创建主方法使用输出:3.2 Lambda练习2完成一个有参且有返回值得Lambda表达式案例创
2023-12-28 15:24:22 1083
原创 SpringBoot3 整合Swagger
Swagger 可以快速生成文档,方便前后开发人员进行协调沟通。遵循规范。文档:https://springdoc.org/v2/
2023-12-26 15:34:07 2011 2
原创 SpringBoot3 整合Redis
RedisTemplate、StringRedisTemplate: 操作redis的工具类。要从redis的连接工厂获取链接才能操作redis。属于 JPA 操作,也不用管。属于响应式编程,不用管。
2023-12-26 15:27:29 1300
原创 SpringBoot3 核心原理
抽取聊天机器人场景,它可以打招呼。效果:任何项目导入此starter都具有打招呼功能,并且问候语中的人名需要可以在配置文件中修改创建自定义starter项目,引入基础依赖编写模块功能,引入模块所有需要的依赖。编写自动配置类,帮其他项目导入这个模块需要的所有组件编写配置文件指定启动需要加载的自动配置其他项目引入即可使用。
2023-12-26 15:14:47 1011
原创 SpringBoot3 基础特性
1.3. FluentBuilder API2. Profiles环境隔离能力;快速切换开发、测试、生产环境步骤:2.1.1 指定环境Spring Profiles 提供一种隔离配置的方式,使其仅在特定环境生效;任何@Component, @Configuration 或 @ConfigurationProperties 可以使用 @Profile 标记,来指定何时被加载。【容器中的组件都可以被 标记】@prifile是可以用在组件@Bean上的,表示此组件的生效环境,如果没有具体指定环境就
2023-12-26 14:51:54 1017
原创 SpringBoot3 数据访问
SpringBoot 整合 、、 进行数据访问场景开发2. 配置数据源安装MyBatisX 插件,帮我们生成Mapper接口的xml文件即可需要再SpringBoot的启动类上添加@MapperScan(basePackages=“xxx”)来告诉mybatis,扫描哪个包下的所有接口4. CRUD编写编写Bean编写Mapper使用插件,快速生成MapperXML测试CRUD5. 自动配置原理SSM整合总结:导入 配置数据源信息配置mybatis的与编写bean,mapper,生成
2023-12-26 12:43:07 476
原创 SpringBoot3 核心技能
Spring使用commons-logging作为内部日志,但底层日志实现是开放的。可对接其他日志框架。spring5及以后 commons-logging被spring直接自己写了。支持 jul,log4j2,logback。SpringBoot 提供了默认的控制台输出配置,也可以配置输出为文件。logback是默认使用的。虽然日志框架很多,但是我们不用担心,使用 SpringBoot 的默认配置就能工作的很好。SpringBoot怎么把日志默认配置好的1、每个starter。
2023-12-26 10:04:00 1607 1
原创 SpringBoot3 应用分析
导入相关的场景,就拥有相关的功能。即场景启动器。默认支持的所有场景:Developing with Spring Boot官方提供的场景:命名为:spring-boot-starter-*第三方提供场景:命名为:*-spring-boot-starter
2023-12-26 09:32:43 977
原创 JVM 性能调优
配置完线程数之后,我们的请求的平均响应时间和GC时间都有一个明显的减少了,仅从效果上来看,我们这次的优化是有一定效果的。大家在工作中对于线上项目进行优化的时候,可以考虑到这方面的优化。
2023-12-08 10:34:02 611
原创 JVM 运行时参数
面试题JVM的参数,你知道的说一下 (百度)说说你知道的几种主要的JVM参数(京东)JVM调优调的哪些参数?在哪里写这些参数?(亚信)内存调优参数都有什么?(顺丰)JVM调优调的哪些参数?问这样有什么好处?在哪里写这些参数(浪潮)
2023-12-07 15:50:42 532
原创 JVM GUI可视化监控及诊断工具
MAT(Memory Analyzer Tool)工具是一款功能强大的Java堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是基于Eclipse开发的,不仅可以单独使用,还可以作为插件的形式嵌入在Eclipse中使用。是一款免费的性能分析工具,使用起来非常方便。大家可以在https://www.eclipse.org/mat/downloads.php下载并使用MAT。只要确保机器上装有JDK并配置好相关的环境变量,MAT可正常启动。
2023-12-07 11:49:36 878
原创 JVM 命令行监控及诊断工具
性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。体会1:使用数据说明问题,使用知识分析问题,使用工具处理问题。体会2:无监控、不调优!简单命令行工具。
2023-12-07 10:10:08 333
原创 JVM 垃圾回收
什么是垃圾( Garbage) 呢?垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。外文:An object is considered garbage when it can no longer be reached from any pointer in the running program.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。
2023-12-06 15:19:09 1025
原创 JVM 执行引擎篇
动态编译(compile during run-time),英文称Dynamic compilation;Just In Time也是这个意思。HotSpot对bytecode的编译不是在程序运行前编译的,而是在程序运行过程中编译的。HotSpot里运行着一个监视器(Profile Monitor),用来监视程序的运行状况。Java字节码(class文件)是以解释的方式被加载到虚拟机中(默认启动时解释执行)。程序运行过程中,那一部分运用频率大,那些对程序的性能影响重要。
2023-12-06 10:39:35 1384
原创 JVM 对象内存布局篇
1、new对象最常见的方式变形1:X的静态方法变形2:XxxBuilder/XxxFactory的静态方法2、Class的newlnstance0:反射的方式,只能调用空参的构造器,权限必须是public3、Constructor的newinstance(X):反射的方式,可以调用空参、带参的构造器,权限没有要求,实用性更广4、使用clone():不调用任何构造器,当前类需要实现Cloneable接口,实现clone(),默认浅拷贝int age;
2023-12-06 09:18:21 243
原创 JVM 运行时内存篇
Java虚拟机栈是什么?Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。是线程私有的。生命周期生命周期和线程一致。特点栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器。如何理解栈管运行,堆管存储?面试题堆和栈的区别、谁的性能更高(艾绒软件)为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?(阿里)
2023-12-04 11:38:58 586
原创 JVM 类的加载
类模板对象所谓类模板对象,其实就是Java类在JVM内存中的一个快照,JVM将从字节码文件中解析出的常量池、类字段、类方法等信息存储到类模板中,这样JVM在运行期便能通过类模板而获取Java类中的任意信息,能够对Java类的成员变量进行遍历,也能进行Java方法的调用。反射的机制即基于这一基础。如果JVM没有将Java类的声明信息存储起来,则JVM在运行期也无法反射。类模型的位置加载的类在JVM中创建相应的类结构,类结构会存储在方法区(JDK1.8之前:永久代;JDK1.8及之后:元空间)。
2023-12-01 14:31:48 210
原创 JVM 字节码
Java 虚拟机不和包括 Java 在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联。无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行。可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁。想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。Java SE规范。
2023-11-30 17:32:10 363
原创 Docker 容器监控之CAdvisor+InfluxDB+Granfana
1、新建目录2、新建docker-compose.yml文件volumes:services:influxdb:ports:volumes:cadvisor:links:ports:volumes:grafana:links:ports:volumes:3、启动docker-compose文件命令:docker-compose up4、查看服务是否启动5、浏览cAdvisorL收集服务。
2023-09-25 20:37:59 250
原创 Docker 容器编排
Docker-Compose是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。
2023-09-25 20:24:18 499
原创 Docker 网络
Docker 网络是 Docker 容器连接到同一主机或不同主机上的其他容器以及外部世界(即通过互联网)的一种方式。Docker 的网络子系统可以使用驱动程序进行插拔。默认情况下存在多个驱动程序,并提供核心网络功能。1、不启动docker模式下的网络配置情况virbr0解释:在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后。
2023-09-25 19:50:39 341
原创 Docker Dockerfile解析
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,* Dockerfile是软件的原材料* Docker镜像是软件的交付品* Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
2023-09-22 18:32:18 386
原创 Docker 安装Redis(集群)
1、新建6个docker容器 redis 实例运行结果:2、进入容器redis-node-1并为6台机器构建集群关系进入容器:docker exec -it redis-node-1 /bin/bash3、链接进入6381作为切入点,查看集群状态 命令:cluster info 和 cluster nodes1、启动6台redis构成的集群并通过exec进入2、对6381新增两个key3、防止路由失效加参数-c并新增两个key4、查看集群信息实例:redis-cli --cluster check 1
2023-09-22 17:33:55 397
原创 Docker 安装MySQL(主从复制)
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;默认值为0,表示不自动清理。
2023-09-22 17:30:44 409
原创 Docker 容器数据卷
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。一句话:有点类似我们Redis里面的rdb和aof文件,将docker容器内的数据保存进宿主机的磁盘中。-v /宿主机绝对路径目录:/容器内目录 镜像名记得加入:--privileged=true原因:如果。
2023-09-21 10:52:34 401
原创 Docker 镜像
是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。:以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载。Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持。
2023-09-19 21:52:02 485
原创 Docker 常用命令
1、启动docker:systemctl start docker2、停l止docker:systemctl stop docker3、重启docker:systemctl restart docker4、查看docker状态:systemctl status docker5、开机启动:systemctl enable docker6、查看dockeri慨要信息:docker info7、查看docker总体帮助文档:docker --help。
2023-09-19 21:14:29 903
原创 Docker 安装
需要正确的理解仓库 / 镜像 / 容器这几个概念:Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。镜像文件:image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
2023-09-19 20:28:10 289
原创 Redis 高性能设计之epoll和IO多路复用深度解析
a、同步阻塞:服务员说快到你了,先别离开我后台看一眼马上通知你。客户在海底捞火锅前台干等着,啥都不干。b、同步非阻塞:服务员说快到你了,先别离开。客户在海底捞火锅前台边刷抖音边等着叫号。c、异步阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户怕过号在海底捞火锅前台拿着排号小票啥都不干,一直等着店员通知。d、异步非阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。拿着排号小票+刷着抖音,等着店员通知。
2023-09-16 20:42:09 538
原创 Redis 五大类型源码及底层实现
面试题:谈谈Redis数据类型的底层数据结构:官网:GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.源码
2023-09-14 14:35:07 449
原创 Redis 缓存过期淘汰策略
数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据;发现已过期,删除,返回不存在。开启隋性淘汰,配置文件中修改:lazyfree-ay-eviction=yes惰性删除策略的缺点是,它对内存是最不友好的。如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。在使用惰性删除策略时,如果数据库中有非常多的过期键,而这些过期键又恰好没有被访问到的话。
2023-09-13 11:08:36 349
【猿来入此】SSM框架角色权限管理系统脚手架源码
2021-03-22
【猿来入此】Jsp+Ssm+Mysql框架实现的手机电脑自适应新闻博客系统源码
2021-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人