@CircuitBreaker 是Spring Retry 包中提供的熔断相关的功能。它是在 @Retryable 的基础上实现的。所以大家在看这篇文章之前可以先回顾下之前我们分析的 spring Retry 中关于 @Retryable 的相关功能:
对 @Retryable 的原理了解之后,我们一起来学习下 @CircuitBreaker。
more >>@CircuitBreaker 是Spring Retry 包中提供的熔断相关的功能。它是在 @Retryable 的基础上实现的。所以大家在看这篇文章之前可以先回顾下之前我们分析的 spring Retry 中关于 @Retryable 的相关功能:
对 @Retryable 的原理了解之后,我们一起来学习下 @CircuitBreaker。
more >>Spring Retry提供了自动重新调用失败的操作的功能。这在错误可能是暂时性的(例如瞬时网络故障)的情况下很有用。Spring Retry提供对流程和基于策略的行为的声明式控制,易于扩展和自定义。接下来,本文将带大家了解 Spring Retry 的使用方法和部分源码解析
more >>CountDownLatch是一个通用的同步工具,CountDownLatch允许一个或多个线程在其他线程执行操作完成前等待。
CountDownLatch需要初始化一个计数器,调用await()方法使线程阻塞,调用countDown()方法让计数器减一,当计数器减为零时,所有等待的线程释放,并且后续await()的线程立即执行。
使用CountDownLatch主要有两个场景
more >>1 | final V putVal(K key, V value, boolean onlyIfAbsent) { |
今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。
网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚。终归是希望能降低大家学习的成本,不希望大家到处找各种不是很靠谱的文章,看完一篇又一篇,可是还是模模糊糊。
阅读建议:四节基本上可以进行独立阅读,建议初学者可按照 Java7 HashMap -> Java7 ConcurrentHashMap -> Java8 HashMap -> Java8 ConcurrentHashMap 顺序进行阅读,可适当降低阅读门槛。
阅读前提:本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识,文中不会对这些知识进行介绍。Java8 用到了红黑树,不过本文不会进行展开,感兴趣的读者请自行查找相关资料。
more >>分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁
首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等,本文记录了使用spring-aop和自定义注解实现事务处理的例子。
1.自定义注解
1 | @Target({ ElementType.METHOD }) |
1.使用top查看CPU使用率高的pid

假如进程125697为cpu占用过高的进程
2.使用top -Hp pid 查看进程下所有线程的运行情况

假如线程125902占用cpu过高
more >>ApplicationContext的中文意思是“应用前后关系”,它继承自BeanFactory接口,
除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、
事件传播等方面进行了良好的支持在ApplicationContext接口的众多实现类中,有3个是我们经常用到的(见表1-1),并且使用这3个实现类也基本能满足我们Java EE应用开发中的绝大部分需求。
表1-1 ApplicationContext接口的常用实现类介绍| 类 名 称 | 功 能 描 述 |
|---|---|
| ClassPathXmlApplicationContext | 从类路径ClassPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。例如: //装载单个配置文件实例化ApplicationContext容器 ApplicationContext cxt = new ClassPathXmlApplicationContext(“applicationContext.xml”); //装载多个配置文件实例化ApplicationContext容器 String[] configs = {“bean1.xml”,”bean2.xml”,”bean3.xml”}; ApplicationContext cxt = new ClassPathXmlApplicationContext(configs); |
| FileSystemXmlApplicationContext | 从指定的文件系统路径中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。例如: //装载单个配置文件实例化ApplicationContext容器 ApplicationContext cxt = new FileSystemXMLApplicationContext(“beans.xml”); //装载多个配置文件实例化ApplicationContext容器 String[] configs = {“c:/beans1.xml”,”c:/beans2.xml”}; ApplicationContext cxt = new FileSystemXmlApplicationContext(configs); |
| XmlWebApplicationContext | 从Web应用中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。这是为Web工程量身定制的,使用WebApplicationContextUtils类的getRequiredWebApplicationContext方法可在JSP与Servlet中取得IoC容器的引用 |
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing
1 | $ hexo server |
More info: Server
1 | $ hexo generate |
More info: Generating
1 | $ hexo deploy |
More info: Deployment
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true