自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

转载 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题

缓存雪崩数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。比如一个雪崩的简单过程:1、redis集群大面积故障2、缓存失效,但依然大量请求访问缓存服务redis3、redis大量失效后,大量请求转向到mysql数据库4、mysql的调用量暴增,很快就扛不住了,甚至直接宕机5、由于大量的应用服务依赖m...

2019-03-10 23:20:13 318

转载 Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单线程的,省去了很多上下文切换线程的时间;3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。下...

2019-03-10 23:11:40 818

转载 Redis并发竞争key的解决方案详解

Redis高并发的问题Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:高并发架构系列:Redis缓存和MySQL数据一致性方案详解如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题以及今天要谈到的Redis并发竞争问题,这里的并发指的是多个redis的client同时set key引起的并发问题。比如:多客户端同时并发写一个ke...

2019-03-10 22:48:45 2006

转载 CountDownLatch、Semaphore等4大并发工具类详解

1.CountDownLatch功能CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。原理:CountDownLatch是通过一个计数器来实现的,计数器的初始值为需要等待线程的数量。eg:CountDownLatch c = new CountDownLatch(10); // 等待线程的数量为10主线程调用Co...

2019-03-10 22:23:05 230

转载 ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

哈希表1.介绍哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。2.链式哈希表链式哈希表...

2019-03-10 22:19:00 858

转载 RPC框架的实现原理,及RPC架构组件详解

RPC的由来随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带...

2019-03-10 22:16:21 1280

转载 分布式锁

什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。1.线程锁主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lock等。2.进程锁为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独...

2019-03-10 22:12:09 121

转载 详解RPC远程调用和消息队列MQ的区别

RPCRPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制。RPC框架知名度较高的有Thrift(FB的)、dubbo(阿里的)。RPC的一般需要经历4个步骤:1、建立通信首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接,主要是通过在客户端和服务器之间建立TCP连接。2、服务寻址...

2019-03-10 22:01:22 554

转载 多种多线程锁机制的实现方式与比较

Java提供了多种多线程锁机制的实现方式,常见的有:synchronized ReentrantLock Semaphore AtomicInteger等每种机制都有优缺点与各自的适用场景,必须熟练掌握他们的特点才能在Java多线程应用开发时得心应手。4种Java线程锁(线程同步)1.synchronized在Java中synchronized关键字被常用于维护...

2019-03-10 21:55:24 4740

转载 Java线程池的使用方式,核心运行原理、以及注意事项

线程池的处理流程就以ThreadPoolExecutor为例,当我们把一个Runnable交给线程池去执行的时候,这个线程池处理的流程是这样的:先判断线程池中的核心线程们是否空闲,如果空闲,就把这个新的任务指派给某一个空闲线程去执行。如果没有空闲,并且当前线程池中的核心线程数还小于 corePoolSize,那就再创建一个核心线程。 如果线程池的线程数已经达到核心线程数,并...

2019-03-10 21:46:34 138

转载 独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁

乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CA...

2019-03-10 21:42:32 167

原创 多线程核心知识:原子性

1、原子性问题原子操作定义:原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将整个操作视为一个整体是原子性的核心特征。存在竞争条件,线程不安全,需要转变原子操作才能安全。方式:循环CAS、锁;上例只是针对一个变量的原子操作改进,我们也可以实现更大逻辑的原子操作。解决:a、J.U.C包内的原子操作封装类CAS...

2019-03-03 23:26:44 2685

原创 CountDownLatch学习

概述CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。用法new CountDownLatch(n)初始化一个计数为n的CountDow...

2019-02-24 15:52:48 152

原创 CyclicBarrier学习

概述字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。package com.business.thread;import java.util.Map;import java.ut...

2019-02-24 15:40:55 91

原创 Semaphore学习

Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施,也是操作系统中用于控制进程同步互斥的量。Semaphore是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。它相当于给线程规定一个量从而控制允许活动的线程数。利用Semaphore设计一个链接池。package com.business.thread....

2019-02-24 15:27:41 127

原创 线程停止.interrupt

package com.business.thread;public class EndThread { private static class useThread extends Thread { public useThread(String name) { super(name); } public void run() { //isInterrupte...

2019-02-21 23:57:51 113

原创 守护线程

守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)       所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。守护线程在没有用户线程可服务时自动离开,在Java中比较特殊的线程...

2019-02-21 23:54:21 85

原创 创建线程的三种方式

package com.business.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/* *创建线程和启动线程的三种方式: *1、继承Thread *2、继承Ru...

2019-02-21 23:49:38 108

原创 Tomcat启动时加载SpringMvc开发的war流程

Tomcat启动1、加载xx加载xxx.war2、创建容器:创建Map iocMap = new HashMap();3、ScanbasePackage,扫描war下面的@Controller,@Service注解的类4、实例化:将扫描到的类通过反射实例化,并存入到iocMap容器中5、依赖注入:将存在依赖的bean进入注入6、UrlMapping:http请求路径和Met...

2019-02-21 23:44:09 780

原创 Mybatis SqlSessionTemplate 源码解析

Mybatis SqlSessionTemplate 源码解析在使用Mybatis与Spring集成的时候我们用到了SqlSessionTemplate 这个类。  <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg in...

2018-08-30 11:17:07 153

转载 判断子线程是否执行完毕

在使用多线程的时候有时候我们会使用 java.util.concurrent.Executors的线程池,当多个线程异步执行的时候,我们往往不好判断是否线程池中所有的子线程都已经执行完毕,但有时候这种判断却很有用,例如我有个方法的功能是往一个文件异步地写入内容,我需要在所有的子线程写入完毕后在文件末尾写“---END---”及关闭文件流等,这个时候我就需要某个标志位可以告诉我是否线程池中所有的子线

2017-12-07 10:59:23 1973

原创 将数据库1的表及表内容复制到数据库2

通过创建数据库1和数据库2之间的db link来实现数据的复制数据库1:db1数据库2:db21、在数据库2中    create public database link mydblink connect to (数据库1的用户名) identified by (数据库2的密码) using '(数据库1的服务器地址)';2、复制一个表的数据 create t

2017-10-31 20:27:53 964

转载 存储过程和函数

本文部分内容转自http://www.cnblogs.com/lengbingshy/archive/2010/02/25/1673476.html本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。      函数限制比较多,比如不能用临时表,只能用表变量.还有一些函

2017-10-28 11:38:24 632

原创 封装ArrayList

转载请注明出处http://blog.csdn.net/pony_maggie/article/details/44786233ArrayList很好用,可以添加任意类型,动态增长,各种库函数支持,如下是个简单示例:public class FillingList { /** * @param args * fill只会对已经存在空间填充,所以

2017-10-24 10:11:06 423

空空如也

空空如也

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

TA关注的人

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