- 博客(6)
- 收藏
- 关注
原创 java中的synchronized锁升级/锁消除
重量级锁底层依赖操作系统的 Mutex(互斥锁) 实现,线程在无法获得锁时会被挂起,不再消耗CPU资源,直到持有锁的线程释放锁后,操作系统再唤醒等待队列中的下一个线程。:锁不存在多线程竞争,而且总是由同一线程多次获得的情况下适用,在一个线程首次获取到对象锁的时候,JVM会将锁设置为偏向锁同时将锁对象头中的线程ID设置为当前线程ID,在锁重入时直接比较对象头中的线程ID就可以,无需进行额外的同步操作,实现锁重入时的性能提升,升级过程从无锁->偏向锁->轻量级锁->重量级锁。
2025-02-21 20:08:27
183
原创 Java集成基于Netty的WebSocket长连接实现服务端消息推送功能
先是前端代码展示(这里创建ws连接,在真实的项目中可以是在登录时或者在其他需要消息推送业务的前端逻辑处建立)将这个方法绑定事件或运行一次后即可与后端请求建立ws连接,实际开发中前端应该封装一个webSocket类来进行更复杂的操作,例如发送心跳,超时重连等,这里简化了。将会阻塞当前线程,在使用时将阻塞主线程直到Netty通道关闭,所以需要在一个新的线程中运行,这也是InitWebSocket类的作用。本项目是微服务架构,但是与单体架构时的消息推送后端代码差别不大。然后是独立的WebSocket模块。
2024-06-19 17:33:19
1216
原创 商城秒杀Demo使用SpringCloud+Redis+RabbitMQ+Redisson 实测抗住1W并发
总结来说,自己从0到1开发一个类似的高并发Demo对自身的帮助还是挺大的,能帮助自己提高对多线程并发的认识、并发安全的控制以及帮助思考如何进行精细的异步处理操作,以及异步操作的并发安全控制,这对提升自己对并发防护、微服务之间通信以及业务划分的理解是非常有益的,可以加深印象,获得一些经验。对于一个普通公司的普通的商城项目,能在1s之内产生1W个请求以及很不错了,实测图如下。这还不是极限,极限估计能到1.5W以上,不过鉴于表结构不够复杂,综合1w应该是没问题的。这是一篇学习笔记,大佬请多指教。
2024-06-02 20:20:45
421
原创 Springboot+SpringCloud+vue微服务项目,后端使用Docker-compose部署至虚拟机环境
2.如下2图类似的utils,model,feign依赖模块,有时候会(经常)报错,业务模块找不到指定的如下1图的依赖,导致无法打包,这时候就可以在被依赖模块中添加2图中框选的,这样就不会打包报错了。在打包之前,注意修改nacos中的配置,这里建议创建两套配置,即添加一个application-prod.yml配置,然后把其中的依赖的地址改成自己刚刚创建依赖容器时的容器名称,如下。根据这里的注释编写把变量换成自己对应的表示就好了,---DcokerFile是为了创建服务镜像。
2024-03-03 20:30:52
1152
1
原创 Minio报错:io.minio.errors.InvalidResponseException: Non-XML response from server
后面发现是因为使用 docker pull命令时不指定版本会默认拉取最新版本的minio,而最新版本的minio的运行命令中需要指定两个端口映射,如下docker run命令第一个-p设置的是minioAPI的端口映射,而第二个-p设置的是minio管理界面的端口映射,而在使用minio提供的接口时需要指定api的访问地址而不是控制台的地址。需要使用minio文件上传服务的nacos配置如下,需要指定endpoint为minioAPI的地址也就是宿主机的ip地址+上图第一个-p的前半部分的端口。
2023-09-29 00:48:24
6755
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人