自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 RabbitMQ如何保证顺序性

在不使用任何Rabbitmq 的高级特性,也没有消息丢失、网络故障之类异常的情况下发生,并且只有一个消费者的情况下,也只有一个生产者的情况下可以保证消息的顺序性。如果有多少生产者同时发送消息,无法确定消息到达Broker的前后顺序,也就无法验证消息的顺序性,因为每一次消息的发送都是在各自的线程中进行的。举个例子,不考虑消息重复的情况下,如果生产者发布的消息分别为msg1、msg2、msg3 那么消费者必然也是按照 msg1、msg2、msg3 的顺序来消费的。如果我们不考虑消息到达MQ的顺序。

2023-05-21 20:46:36 5271 1

原创 Tomcat 的maxConnections、maxThreads、acceptCount 之间的关系

tomcat的maxConnections、maxThreads、acceptCount 之间的关系

2023-05-19 20:45:42 718 1

原创 泛型返回值 <T> T 与 T 的区别

泛型返回值 <T> T 与 T 的区别T 受入参泛型的影响 T 不受入参 T 的影响/** * @Description * 有的方法返回值为 <T> T ,有的方法返回值为 T ,区别在那里 ? **/public class Request<T> { public <T> T getObject(Class<T> tClass) throws IllegalAccessException, Instantiat..

2020-08-02 09:10:14 4978

转载 响应速度不给力?解锁正确缓存姿势

1. 常见概念在合理应用缓存前,需要了解缓存领域里相关的几个常用术语:1)缓存命中:表示数据能够从缓存中获取,不需要回源;2)Cache miss:表示没有命中缓存,如果缓存内存中还有内存空间的话,会将数据加入到缓存中;3)存储成本:当没有命中缓存时,回源获取后会将数据放置到存储中,整个将数据放置到存储空间所需要的时间以及空间称之为存储成本;4)缓存失效:当源数据发生变更后,意味着缓存中...

2020-01-08 16:35:28 206

原创 Java Queue add/offer ,element/peek , remove/poll 区别说明

在 Java Queue 上 add/offer ,element/peek , remove/poll 中三个方法均为重复方法 , 在选择使用时不免有所疑惑 , 这是简单说明下 :1. add() 和 offer() 的区别add() 和 offer() 都是向队列中添加一个元素 . 一些队列有大小限制,因此如果想在已满的队列加入一个新队列, 调用 add() 方法就会抛出一个 unche...

2019-09-17 11:26:26 392

原创 Java8多线程异步调用 CompletableFuture 详解

CompletableFuture 详解CompletableFuture类实现了CompletionStage和Future接口。Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值,要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步...

2019-07-09 07:13:31 791

原创 时间工具类

package com.welab.common.utils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Locale;import java.util.TimeZon...

2019-06-26 22:18:52 302

转载 AbstractQueuedSynchronizer源码剖析- 深刻解析与模拟线程竞争资源

原文出自 : https://blog.csdn.net/pfnie/article/details/531918921、细说AQS      在深入分析AQS之前,我想先从AQS的功能上说明下AQS,站在使用者的角度,AQS的功能可以分为两类:独占锁和共享锁。它的所有子类中,要么实现并使用了它独占锁的API,要么使用了共享锁的API,而不...

2019-03-19 10:18:12 120

转载 Java多线程编程-(18)-借ThreadLocal出现OOM内存溢出问题再谈弱引用WeakReference

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78513735前几篇:Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(8)-多图深入分析ThreadLocal原理Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析一、简单回顾在上几篇...

2018-12-31 09:31:08 197

转载 Java多线程编程-(17)-多线程异步调用之Future模式

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78390642一、线程计数器回顾在《Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier》 这一篇中,我们使用线程计数器的方式实现了在主线程中等待计数的线程执行完之后在执行阻塞等待之后的代码。看段代码回顾一下:...

2018-12-31 09:26:14 193

转载 Java多线程编程-(16)-等待/通知模式接口Condition接口深入分析

原文出自 :一、Condition接口简介在上述两篇文章中讲解AQS的时候,我们已经知道了同步队列AQS的内部类ConditionObject实现了Condition接口,使用ReentrantLock和ReentrantReadWriteLock的内部类Sync我们可以通过newCondition() 方法创建一个或多个ConditionObject对象。在使用synchronize...

2018-12-31 09:24:54 278

转载 Java多线程编程-(15)-读写锁ReentrantReadWriteLock深入分析

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78375986–一、前言上两篇的内容中已经介绍到了锁的实现主要有ReentrantLock和ReentrantReadWriteLock。ReentrantLock是重入锁,顾名思义就是支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁,上文中已经提到在AQS中的...

2018-12-31 09:23:46 155

转载 Java多线程编程-(14)-无锁CAS操作以及Java中Atomic并发包的“18罗汉”

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78364246上一篇:Java多线程编程-(13)- 关于锁优化的几点建议一、背景通过上面的学习,我们应该很清楚的知道了在多线程并发情况下如何保证数据的安全性和一致性的两种主要方法:一种是加锁,另一种是使用ThreadLocal。锁是一种以时间换空间的方式,而Thre...

2018-12-30 22:56:33 156

转载 ava多线程编程-(13)- 关于锁优化的几点建议

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78363616一、背景在《 Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力》 这一篇文章中,我们大致介绍了Java虚拟机对锁优化所做的努力,提到了:偏向锁、轻量级锁、重量级锁以及自旋锁。通过上面的...

2018-12-30 22:55:18 160

转载 Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78341626一、Lock接口在上一篇文章中: Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信 介绍了如何使用Lock实现和synchronized关键字类似的同步功能,只是Lock在使用时需要显式地获取和释放锁,synchronized实现的隐式的获...

2018-12-30 22:54:07 147

转载 Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78327228一、背景对于Java来说我们知道,Java代码首先会编译成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上进行执行。Java中所使用的并发机制依赖于JVM的实现和CPU的指令。下边我们对常见的实现同步的两...

2018-12-30 22:53:07 118

转载 Java多线程编程-(10)-单例模式几种写法的错与对

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78310385背景知识在所有的主流23中设计模式中,单例模式作为最简单也最容易理解也是使用最普遍的设计模式,他是一种对象创建模式,用于产生一个对象的具体实例,他可以确保系统中一个类只产生一个实例。单例模式的优点如下:1、对于频繁创建的对象,可以省去new的操作锁花费的时...

2018-12-30 22:51:04 119

转载 Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78298840案例代码1、首先看一下代码,模拟了一个线程数为500的线程池,所有线程共享一个ThreadLocal变量,每一个线程执行的时候插入一个大的List集合:import java.util.ArrayList;import java.util.List;im...

2018-12-30 22:48:48 229

转载 Java多线程编程-(8)-多图深入分析ThreadLocal原理

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78297568ThreadLocal可以说是笔试面试的常客,每逢面试基本都会问到,关于ThreadLocal的原理以及不正当的使用造成的OOM内存溢出的问题,值得花时间仔细研究一下其原理。这一篇主要学习一下ThreadLocal的原理,在下一篇会深入理解一下OOM内存溢出的原理...

2018-12-30 22:47:09 95

转载 Java多线程编程-(7)-使用线程池实现线程的复用和一些坑的避免

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78253096线程复用:线程池首先举个例子:假设这里有一个系统,大概每秒需要处理5万条数据,这5万条数据为一个批次,而这没秒发送的5万条数据数据需要经过两个处理过程,第一步是数据存入数据库,第二步是对数据进行其他业务的分析,假设第一步我是用的是普通的JDBC插入数据,为了不...

2018-12-30 22:43:54 206

转载 Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78218736倒计时CountDownLatchCountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。举了例子:我们知道的集齐七颗龙珠就可以召唤神龙,那我们就一起召唤一下,下边我需...

2018-12-30 22:42:50 91

转载 Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78197583在《Java多线程编程-(4)-线程间通信机制的介绍与使用》已经学习了,可以使用方法wait/notify 结合同步关键字synchronized实现同步和线程间通信,下边介绍一种更为方便的方式实现同步和线程间通信的效果,那就是Lock对象。Lock对象简介这...

2018-12-30 22:40:49 89

转载 ava多线程编程-(4)-线程间通信机制的介绍与使用

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78195817线程间通信简介我们知道线程是操作系统中独立的个体,但是这个单独的个体之间没有一种特殊的处理方式使之成为一个整体,线程之间没有任何交流和沟通的话,他就是一个个单独的个体,不足以形成一个强大的交互性较强的整体。为了提高CPU的利用率和各线程之间相互协作,Java的...

2018-12-27 20:02:41 445

转载 Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78114278ThreadLocal简介我们通过上两篇的学习,我们已经知道了变量值的共享可以使用public static变量的形式,所有的线程都使用同一个被public static修饰的变量。那么如果我们想实现每一个线程都有自己的共享变量该如何解决哪?JDK提供的Thr...

2018-12-27 20:01:17 106

转载 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78005352一、Synchronized锁重入(1)关键字Synchronized拥有锁重入的功能,也就是在使用Synchronized的时候,当一个线程得到一个对象的锁后,在该锁里执行代码的时候可以再次请求该对象的锁时可以再次得到该对象的锁。(2)也就是说,当线程请求一...

2018-12-27 19:59:41 166 1

转载 Java多线程编程-(1)-线程安全和锁Synchronized概念

原文出自 : https://blog.csdn.net/xlgen157387/article/details/77920497 一、进程与线程的概念(1)在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。在未配置 OS 的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行;在多...

2018-12-27 19:55:50 118

转载 CentOS中防火墙相关的命令(CentOS7中演示)

原文出处 : https://blog.csdn.net/pucao_cug/article/details/717588831、firewall相关的操作2、iptables相关的操作&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.1、常规命令&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.2、使用编辑文件的方...

2018-11-13 10:23:09 421

转载 RabbitMQ实战教程(十二):消息队列的应用场景

这是网上的一篇教程写的很好,不知原作者是谁,没法注明出处,我看的时候也是别人转载的,这里就注明一下那篇转载的地址:http://blog.csdn.net/cws1214/article/details/52922267消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构...

2018-11-08 16:37:56 905

原创 Java8数组和List相互转换

1 数组转换为List1.1 使用java.util.Arrays工具类中的asList()方法String[] arrays = {"a", "b", "c"};List&lt;String&gt; list = Arrays.asList(arrays);注意 : 将数组转换List后,不能对List增删,只能查改,否则抛出 UnsupportedOperationException...

2018-10-22 13:48:12 38319 4

转载 RabbitMQ实战教程(十一) : 虚拟主机vhost与权限管理

原文出处 : https://blog.csdn.net/vbirdbest/article/details/78702685虚拟主机vhost每一个RabbitMQ服务器都能创建虚拟消息服务器,我们称之为虚拟主机。每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的交换机、队列、绑定等,拥有自己的权限机制。vhost之于Rabbit就像虚拟机之于物理机一样。他们通过...

2018-09-26 23:07:27 1147

转载 RabbitMQ实战教程(十) : 消息确认Ack

一:消费者确认消费者确认或者说消费者应答指的是RabbitMQ需要确认消息到底有没有被收到 - 自动应答boolean autoAck = true;channel.basicConsume(QUEUE_NAME, autoAck, consumer);12在订阅消息的时候可以指定应答模式,当自动应答等于true的时候,表示当消费者一收到消息就表示消费者收到了消息,消费者收到了消息就会立...

2018-09-26 23:04:52 1640

转载 RabbitMQ实战教程(八) : 队列声明queueDeclare

原文出处 : https://blog.csdn.net/vbirdbest/article/details/78670550简介本节主要讨论队列声明的各个参数queueDeclare(String queue, boolean durable, boolean exclusive, Map&lt;Strin...

2018-09-26 23:03:02 853

转载 RabbitMQ实战教程(九) : 消息属性Properties

原文出处 : https://blog.csdn.net/vbirdbest/article/details/78670550简介本节主要讨论队列声明的各个参数queueDeclare(String queue, boolean durable, boolean exclusive, Map&amp;lt;Strin...

2018-09-26 22:54:39 2752

转载 RabbitMQ实战教程(七) : 远程过程调用RPC

原文出处 : https://blog.csdn.net/vbirdbest/article/details/78634188简介远程过程调用(RPC): 客户端发送一个请求到远程服务器上,远程服务器接收请求并处理结果,将结果响应给客户端,这个过程被称为远程过程调用。RPC涉及到的基本知识:关于队列:整个过程会设计到两个队列一个是专门保存请求的队列,一般名字被称为rpc_queue,...

2018-09-26 22:48:49 186

转载 RabbitMQ实战教程(六) : 首部交换机Headers

原文出处 : https://blog.csdn.net/vbirdbest/article/details/78638988简介首部交换机和扇形交换机都不需要路由键routingKey,交换机时通过Headers头部来将消息映射到队列的,有点像HTTP的Headers,Hash结构中要求携带一个键“x-match”,这个键的Value可以是any或者all,这代表消息携带的Hash是需要...

2018-09-26 22:24:18 349

原创 使用MockMvc测试Controller

1. 概述对模块进行集成测试时,希望能够通过输入URL对controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试的变得的很麻烦,比如: 启动速度慢、测试验证不方便、依赖网络环境等,这样会导致测试无法进行,为了可以对Controller进行测试,可以通过引入MockMVC进行解决.2.运行配置引入的jar :&lt;!-- 单元测试 --&g...

2018-09-24 19:37:53 4837

原创 RabbitMQ实战教程(五)-路由模式

1. 路由模式跟订阅模式类似,只不过在订阅模式的基础上加上路由,订阅模式是分发到所有绑定到该交换机的队列,路由模式只分发到绑定在该交换机上面指定的路由键队列.2. Direct 直接交换机直连交换机(Direct Exchange)是一种带路由功能的交换机,它将消息中的Routing Key与该交换机关联的所有Binding中的Routing Key进行比较,如果完全相等将消息发送到B...

2018-09-18 11:03:36 303

原创 RabbitMQ实战教程(四)_扇形交换机发布订阅(Publish-Subscribe)

RabbitMQ实战教程(四)_扇形交换机发布订阅(Publish-Subscribe)1. 订阅模式即一个生产者发送消息给多个消费者,且每个消费者都收到一次,也即是一个消息能够被多个消费者消费.发布订阅类似观察者设计模式,一般适用于当接收到某条消息时同时作多种类似的任务处理, 如果用户注册,注册成功需要发送短信、发送邮件到注册邮箱.2. fanout 扇形交换机之前我们直接发送消息到...

2018-09-18 11:02:02 583

原创 RabbitMQ实战教程(三) : 工作队列

RabbitMQ实战教程(三) : 工作队列1. 工作队列简单队列不足 : 不支持多个消费者即一个生产者可以对应多个消费者同时消费,相比简单队列支持多消费者 . 因为实际工作中,生产者服务一般都是很简单的业务逻辑处理之后就发送到队列,消费者接收到队列的消息之后,进行复杂的业务逻辑处理,所以一般都是多个消费者进行处理.如是是一个消费者进行处理,那么队列会积压很多消息.工作队列分为两...

2018-09-18 11:00:49 502

原创 RabbitMQ实战教程(二) : 简单队列

RabbitMQ实战教程(二) : 简单队列1. 简单队列官方内容参考:http://www.rabbitmq.com/tutorials/tutorial-one-java.html即一处生产者对应一个消费者,一对一的关系,不多个消费者消费2. 代码演示2.1 采用 maven 方式 创建项目首先引入RabbitMQ的Java客户端依赖&lt;dependency&gt; ...

2018-09-18 10:57:33 347

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除