理解 Jdk Lock 的使用

JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。

ReentrantLock 还具有嗅探锁定、多路分支通知等功能。

阅读更多

线程间通信-wait/notify/join/ThreadLocal/线程状态

  在将某一任务拆份成多个子任务,使用多线程执行这些子任,就涉及到线程通信,才能使用多子任变成一个整体。

  线程间通信后,系统之间的交互性会更强大,在提高 CPU 利用率时还有助于对各线程任务的把控和监督。

阅读更多

缓存应用之本地缓存-Guava Cache

缓存是高并发系统的三把利器之一(另两把是 限流、降级),可以说是必不可少的。缓存的主要目的是为了解决磁盘与内存速度差异问题,解决高并发下频繁访问数据库导致磁盘 I/O 压力和 CPU 负载过高问题。

这里所说的缓存是指业务系统的缓存,是将数据缓存在内存中,当下次有相同请求时就直接从内存中取数据返回。

缓存可以在服务端本地,也可以是远程独立的缓存系统,如 Redis,通常本地缓存和远程缓存配合使用。

本篇文章在 Spring 缓存体系上进行扩展和补充,更多可参考 Spring Boot 2实践系列(十):Spring 缓存体系Spring Boot 2实践系列(十一):Ehcache集成详解和使用Spring Boot 2实践系列(十二):Spring Data Redis 集成详解和使用官方:Spring Data Redis

阅读更多

微服务监控之Spring Boot Admin Web管理

在 Spring Cloud 微服务架构中,使用 Spring Boot Admin 对微服务进行监控和管理。

关于 Spring Boot Admin 的基本应用,可参考 Spring Boot 2实践系列(十六):Spring Boot Admin - Actuator 监控管理 Web 框架 ,Spring Boot Actuator 可参考 Spring Boot 2实践系列(六):应用监控模块 Actuator 详解和集成Spring Boot Admin 2.14 官方文档

阅读更多

理解 synchronized 同步锁的使用

非线程安全 是在多个线程对同一个对象中的实例变量进行并发访问,读取的数据不一致,即数据被意外修改过,出现了脏读

synchronized 是 Java 中的关键字,是一种同步锁,可以修改方法、代码块、静态方法、类,使多线程以排队方式进行同步处理。

阅读更多

微服务之间调用的安全认证

微服务之间的相互调用,需要一套认证机制来确认调用是安全的。这不同于在 API 网关的统一认证,主要是防止在微服务暴露在外网的情况下,内部接口被外部恶意调用。

如果微服务是在内网,对外暴露的只有 API 网关,则可以不用做认证。本篇以 JWT 技术来实现安全认证。更多关于 JWT ,可参考分布式应用系列(一):详细理解 JWT(Json Web Token)

阅读更多