270760Java 多线程开发之 Callable 与线程池(三) 2018-03-08我们常见的创建线程的方式有 2 种:继承 Thread 和 实现 Runnable 接口。 其实,在 JDK 中还提供了另外 2 种 API 让开发者使用。 Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式: 实现 Callable 接口。
333810Dubbo 基础教程 2018-02-22当服务越来越多时,容量的评估,小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力实时管理集群容量,提供集群利用率。其中,用于提高机器利用率的资源调度和治理中心是关键。 Dubbo 是阿里巴巴开源项目的一个分布式服务框架。其致力于提供高性能和透明化的 RPC 远程调用方案,以及 SOA 服务治理方案。
272260Spring Boot 入门之消息中间件篇(五) 2018-01-26在消息中间件中有 2 个重要的概念:消息代理和目的地。当消息发送者发送消息后,消息就被消息代理接管,消息代理保证消息传递到指定目的地。 我们常用的消息代理有 JMS 和 AMQP 规范。对应地,它们常见的实现分别是 ActiveMQ 和 RabbitMQ。 上篇文章 《Spring Boot 入门之缓存和 NoSQL 篇(四)》 。
265011RabbitMQ 工作模式介绍 2018-01-19之前,笔者写过 《 CentOS 7.2 安装 RabbitMQ》 这篇文章,今天整理一下 RabbitMQ 相关的笔记便于以后复习。 在 RabbitMQ 官网上提供了 6 中工作模式:简单模式、工作队列模式、发布/订阅模式、路由模式、主题模式 和 RPC 模式。 本篇只对前 5 种工作方式进行介绍。
278760Maven 实现环境隔离 2018-01-19通常,一个项目在本地开发完成后,需要提交到测试环境进行测试,测试完成后最终放到生成环境运行。但是,这 3 个运行环境的配置必然有所不同。当每次提交到不同的环境都需要修改项目的配置,这些操作显得非常繁琐且容易出错。 本文将介绍使用 Maven 实现环境隔离的小技巧来避免人工修改出错,解决上述问题。 演示环境:IDEA
263630Lombok 简单入门 2018-01-18Lombok 是一个 Java 库,它作为插件安装至编辑器中,其作用是通过简单注解来精简代码,以此达到消除冗长代码的目的。 通过注解自动生成成员变量的 getter、setter 等方法,使代码简洁 修改类变量名时,无需关注其 getter、setter 等方法
259700Java 多线程开发之原子变量与 CAS 算法(二) 2018-01-16在上篇《Java 多线程开发之 volatile(一)》文章中介绍了 volatile 的相关内容,它是一个轻量级的锁,但不支持原子操作。 本篇将介绍原子操作相关内容。 CAS (Compare-And-Swap) 是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。
256131Java 多线程开发之 volatile(一) 2018-01-15Java 提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。 我们可以将 volatile 看做一个轻量级的锁,但是又与锁有些不同: Java 内存模型规定了所有的变量(此处的变量是指成员变量和静态变量)都存储在主内存中,每条线程都有自己的工作内存。
266630WireMock 简单入门 2018-01-03 最近公司的项目需要重构,采用前后端分离模式。由于前后端开发人员开发效率和进度的不同,前端人员在编写调用接口代码时需要伪造数据。这意味着 N 个前端人员需要维护 N 份数据,且每个前端人员可能对业务理解不同,伪造出的数据存在偏差,因此在真正与后端联调接口时会出现问题。 为了解决这一问题,我们可以使用 WireMock。
277670Shiro 实现 Tomcat 集群的 Session 共享 2017-12-20Session 共享有多种方案,之前写过《Spring Session 实现 Tomcat 集群的 Session 共享》 文章,功能实现起来非常简单和方便。 最近在学习 Shiro 框架,Shiro 也提供了会话管理的功能。如果项目中选用 Shiro 作为权限控制的方案,同时项目又需要集群,那么可以自定义 sessionDAO 来实现 Session 共享。 JDK:1.8 容器:Tomcat 8 Session 存储容器:Redis 3.2.0