自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 在Java项目中使用traceId跟踪请求全流程日志

在Java项目中使用traceId跟踪请求全流程日志点击此处连接

2021-03-11 16:37:34 18

转载 全面理解Java内存模型(JMM)及volatile关键字

点击此处

2021-02-09 10:23:50 36

转载 什么是 JWT -- JSON WEB TOKEN

什么是 JWT – JSON WEB TOKEN <<<<<< 请点击

2020-12-23 16:49:06 38 2

转载 CURL 发送POST请求

curl 发送post请求

2020-09-11 20:33:31 41

原创 Disruptor并发框架使用三

一、Disruptor场景使用    场景2:在复杂场景下使用RingBuffer(希望P1生产的数据给C1,C2并行执行,最后C1,C2执行结束后C3执行)

2020-08-16 16:49:07 61

原创 Disruptor并发框架使用二

一、Disruptor场景使用    我们在创建Disruptor框架实例的时候,我们可以直接使用RingBuffer,以及其他的API操作。    场景1:使用EventProcessor消息处理器或者使用WorkerPool消息处理器    场景2:在复杂场景下使用RingBuffer(希望P1生产的数据给C1,C2并行执行,最后C1,C2执行结束后C3执行)    场景3:多生产者,多消费者的使用    使用EventProcessor消息处理器示例:public class Pro..

2020-07-27 20:23:43 52

原创 Spring 配置多数据源并实现Druid自动切换

一、多数据源切换    1、 类或者方法上只需要添加注解,即可实现多数据源切换,具体逻辑实现已经封装在数据访问层,业务逻辑处理层等多个组件进行使用   2、类或者方法上添加如下注解:@DataSource(ContextConstant.DataSourceType.CTS) 或者@DataSource(ContextConstant.DataSourceType.REPORT) ,分别表示切换到XXX数据库和XXS数据库    3、若需要再增加其他数据源,只需要在配置文件application..

2020-07-21 20:25:24 191

转载 高并发之_秒杀系统

秒杀系统,请点击此处

2020-07-08 15:16:41 45

原创 Disruptor并发框架使用一

   一、Disruptor并发框架简介    能够以很低的延迟,产生大量的交易,建立在JVM平台上,核心是一个业务逻辑的处理器,它能够在一个线程里每秒处理六百万订单。业务逻辑处理器是完全运行在内存中,使用事件源驱动方式。能够在无锁的情况下,实现网络Queue并发操作。    Disruptor是一个高性能的异步处理框架,或者认为是最快的消息处理框架(轻量JMS java message serverice),也可以认为是以一个观察者的模式实现,也可以任务是以一个监听者的模式实现。你可以理解为他是一.

2020-06-21 23:20:00 83

转载 全方位的技术服务及相关技术解决方案

点击此链接https://www.iteye.com/topic/1128561

2020-06-12 18:36:31 68

转载 非阻塞同步算法与CAS(Compare and Swap)无锁算法

转发地址:https://www.cnblogs.com/Mainz/p/3546347.html

2020-05-14 20:31:08 63

原创 java实现FTP服务上传下载

   ftp文件的上传与下载@Controller@RequestMapping("/ftp")public class UploadFileToFtpController { private static Logger log = LoggerFactory.getLogger(UploadFileToFtpController.class); private Cha...

2020-05-06 16:22:16 71

原创 查看Linux内存、CPU运行情况

   在开发和运维过程中,经常会接触到内存占用过多,告警,或者内存泄露情况,下面就几种情况做简述说明1、某些进程重复启动,例如tomcat启动失败  命令: ps -ef |grep tomcat2、top命令 参考文章1 参考文章2按下 1 :查看几核处理器,例如下图中是两核 Cpu0核Cpu1shift + m :查看详情free -h :磁盘使用量和占用率ps -ef | s...

2020-05-04 16:48:48 88

原创 服务器:Cannot allocate memory

  参加文章1:(https://blog.csdn.net/u013810234/article/details/81079627)   [参考文章2]:(https://www.cnblogs.com/ydkzf-qiu/p/10237183.html)   tomcat启动异常:Cannot allocate memory1、free -h 查看内存使用情况:2.查看tomca...

2020-04-20 14:56:26 124

原创 ReentrantReadWriteLock_读写锁

   读写锁的核心是实现读与写的分离,在高并发的情况下,尤其是读多写少的情况下,性能要远高于重入锁.对于Synchronize,ReentrantLock时,同一个时间内,只能由一个线程进行访问被锁定的代码,而读写锁则不同,其本质是分成两个锁,即读锁和写锁. 在读锁下,多个线程可以并发的进行访问,但是在写锁的时候,只能一个个的顺序访问.    读读共享,写写互斥,读写互斥 一、读写锁代码...

2020-04-06 21:00:05 76

转载 Linux 常用命令及其定时任务

https://www.pengyun.fun/cute-hand/public/api/showArticle?articleId=95

2019-12-27 17:47:12 70

原创 重入锁和读写锁

   在java多线程中,我们知道可以用synchronize关键字来实现线程间的同步互斥工作,还有更加优秀的机制去实现同步互斥工作,Lock对象。重入锁和读写锁,他们具有比synchronize更加强大的功能,并且具有嗅探锁定,多路分支等功能。 一、ReentrantLock(重入锁)(详见JDK-API)public class UseReentrantLock { priva...

2019-11-24 19:45:49 100

原创 Semaphore信号量应用

一、Semaphore(详见JDK-API)   一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 二、应用场景   在semamphor...

2019-11-24 11:26:01 84

原创 CyclicBarrier和CountDownLatch的使用

一、CyclicBarrier(JDK-API)   一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。例如:每个线程代表一个跑步运动员,当每...

2019-11-03 21:59:53 91

原创 线程池的使用及其拒绝策略

一、Executor框架提供的线程池(参考JDK6—API) 二、JDK提供自定义线程池(参考JDK6—API) 三、JDK提供自定义线程池详细说明(参考JDK6—API) 三、自定义拒绝策略   在实际应用中我们通常采用DiscardOldestPllicy策略,如果出现高并发的情况下,无法完全执行所有的任务。当然我们也可以自定义拒绝策略,把拒绝的任务摘要写进日志或...

2019-11-03 00:30:01 108

原创 多线程设计模式之Future、Master-Worker和生产者-消费者模型

  并行设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行程序相比,并行程序的结构通常更为复杂。因此合理的使用并行模式在开发中更有意义,目前在开发中应用最多的是Future,Master-Woker和生产者-消费者模式 一、Future模式   流程图如下public interface Data { String getRequest();}...

2019-10-07 23:11:02 113

原创 ConcurrentLinkQueue和BlockingQueue

  在并发队列上,JDK提供了两种实现,一个是以ConcurrentLinkQueue为代表的高性能的队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue 一、ConcurrentLinkedQueue  ConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLin...

2019-10-07 17:25:09 120

原创 Redis缓存和数据库双写一致性问题

  本文由以下三个部分组成(特别说明:此文参考今日头条技术文档)   1、讲解缓存更新策略   2、对每种策略进行缺点分析   3、针对缺点给出改进方案 正文   先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败...

2019-10-06 11:27:40 430

原创 Concurrent和CopyOnWrite容器

一、ConcurrentMap   concurrentMap接口下面有两个重要实现:  ConcurrentHashMap  ConcurrentSkipListMap(支持并发排序功能,弥补ConcurrentHashMap)1、ConcurrentHashMap内部使用段(segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,它们有自己的锁。只要多个修...

2019-10-04 22:05:03 143

原创 ThreadLocal保证线程安全

一、概念   线程局部变量,是一种多线程并发访问变量的解决方案。与synchronized等加锁的方式不同,ThreadLocal完全不提供锁。而使用以空间换时间的手段,为每个线程提供变量的副本,以保证线程安全。  从性能上来说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但是作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使用T...

2019-10-02 16:05:30 296

原创 单例在多线程中保证线程安全

   在多线程模式中,考虑到性能和线程安全问题,一般选择两种比较经典的单例模式,既能提高性能,也能保证线程安全 1、double check instance 双重检查锁定    原理参考链接:双重检查锁定原理链接public class DubbleSingleton { private volatile static DubbleSingleton ds; public...

2019-10-02 15:27:46 128

原创 用wait/notify 模拟Queue

一、BlockingQueue支持阻塞队列    此例子主要是模拟LinkBlockingQueue中put和take方法public class SimulationQueue { // 1 装载元素的容器 private final List<Object> list = Lists.newArrayList(); // 2 计数器 pri...

2019-10-02 10:37:36 71

原创 多线程通信 wait和notify

一、概念   线程是操作系统中独立的个体,这些线程如果不通过特殊的手段进行处理,就无法组成一个完整的整体。因此线程通信就称为组成一个整体的必须条件之一。当线程之间存在通信,那么系统之间的交互就会更加强大。在提高CPU使用率的前提下,会使开发人员对线程任务在开发的过程中进行有效的把控和监督。   使用wait/notify实现线程之间的通信。这两个方法都是Object的类方法。也就是jav...

2019-10-01 19:51:31 94

原创 volatile关键字 线程可见性

一、概念   在java中,每一个线程都会有自己的工作内存区域,在主内存中对共享变量值进行拷贝,形成副本,放在每个线程独自的内存区域。当各自的线程运行时,会在自己的内存区域操作这些变量的值,为了存取一个共享的变量,一个线程通常获锁定并且清除自己的内存工作区,把这些共享变量的值从所有线程共享内存区域中正确的装入到自己的工作内存区域,当线程解锁时,把工作区域的变量值刷新到主内存中的共享变量中。...

2019-09-28 23:01:24 102

原创 Synchronize 对象锁,类锁,重入锁

一、对象锁和类锁 1、线程安全:当多个线程访问某一个类(对象或者方法),这个类始终能够表现出正确的行为,  那么此类(对象或者方法)是线程安全的  synchronized:可以在任意对象或者方法上加锁,而加锁的这段代码称为‘互斥区’或者临界区2.对象锁和类锁具体参考:对象锁和类锁示例3.脏读:读到了共享变量中未刷新的值 二、重入锁 1、重入锁:关键字synchronized...

2019-09-22 22:42:12 284

原创 java8 新时间和日期

一、java8对时间的新应用   LocalDate,LocalTime,LocalDateTime   

2019-09-16 00:21:09 69

原创 java8和ThreadLocal解决时间格式的线程安全问题

一、传统时间,日期,日期格式是变化的,多线程访问下都是线程不安全的,解决此不安全问题实例如下 public class DateFormateThreadLocal {   private static final ThreadLocal df = new ThreadLocal(){   @Override   protected DateFormat initialV...

2019-09-15 00:47:24 158

原创 java8 并行流原理及其使用

原理:    当线程在多核运行时,比如每一个核分配一个线程,当某一个线程阻塞,另外其他线程继续处理任务,当其他处理完了,此阻塞线程才刚开始执行任务任务,造成内存利用不足。java8在此做了相当大的改进,分为分拆个很多个小任务,在多核内存上执行,当其他线程任务队列执行完成,会偷偷的去拿阻塞队列中未执行完的进行执行,达到充分利用内存资源,高效的目的代码示例:public class For...

2019-09-14 00:23:44 606 1

原创 Idea 一步彻底解决idea启动乱码问题

方法如下:    HELP->Edit Custom VM OPtions中加:   -Dfile.encoding=utf-8

2019-08-30 19:28:41 297 1

转载 一种可以避免数据迁移的分库分表scale-out扩容方式

此博客为转发

2019-08-19 14:53:21 57

原创 springboot Docker的安装及其使用

   一、简介  Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;也就是说在docker上安装好各种软件,打包成一个镜像,可以在其他的虚拟上安装,直接启动docker容器中已经安装好的软件,只需要安装一次即可,达到复用的目的docker主机(Host): 安装了Doc...

2019-08-04 17:18:54 84

原创 git 当前的git分支是基于哪个分支创建的

   git reflog --date=local | grep GJ-62730(此为当前分支号)

2019-07-17 13:57:19 2776

原创 java8 新特性

参考链接:https://www.runoob.com/java/java8-new-features.html 新特性Java8 新增了非常多的特性,我们主要讨论以下几个:Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。Lambda 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与l...

2019-07-08 14:29:05 155

原创 spring InitializingBean与DisposableBean的使用

参考链接:https://www.jianshu.com/p/c2e33c451ee0在项目中,我们会使用到自定义bean,做一些特定义的功能方法,示例如下所示: @Servicepublic class ProductService implements InitializingBean, DisposableBean {  @Autowired  private ProductSvc...

2019-07-05 19:33:00 166

原创 SpringBoot 日志框架的使用

   一、日志框架 市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…日志门面(日志抽象层)日志具体实现JCL(Jakarta Commons Logging) SLF4j(Simple LoggingFacade for Java)Log4j JUL(java.util.logging) Log4j...

2019-06-30 16:18:22 109

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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