Java并发与多线程大总结

Common Concurrent Knowledge 1. LockSupport.park()和unpark(),与object.wait()和notify()的区别? 1). 面向的主体不一样。LockSuport主要是针对Thread进行阻塞处理,可以指定阻塞队列的目标对象,每次可以指定具体的线程唤醒。Object.wait()是以对象为纬度,阻塞当前的线程和唤醒单个(随机)或者所有线程。 2……

LRUMap的简单实现

定义: LRUMap使用最近最少使用算法,当一个元素添加或者被访问,就是最近最多使用的,内部维护一个列表,表头是最近最少使用的元素,表尾是最近最多使用的,当一个元素添加或者被访问时候,这个元素会被移动到列表表尾,而当元素数量达到最大的时候,会从表头删除一个原色。 实现: 12345678910111213141516171819202122……

神奇的Spring AOP

最近在使用Spring的过程中,发现了一个细节,这个细节对正确配置Spring的AOP功能有很大影响。 下面有一个服务: 12345678910111213public interface service {   public void methodA();   public void methodB(); } public class ServiceImpl {   public void methodA&#……

按照权重返回数组中的数字

问题:有N个数字,每个数字有一个权重,例如:[1, 0.2] [5, 0.5] [8, 0.3], 要求按照权重来返回数字。 算法描述: 这个需要使用随机数产生数组索引,但是随机数产生的索引是均等概率的,由于需要按照权重来返回数字,我们需要舍弃一些数字,权重小得舍弃的多,权重大得舍弃的少。 算法: 1. 根据权重数组,生成权重次数数……

如何查看线上的Java进程使用的GC收集器类型

使用下面的命令可以查看是否使用了指定类型GC收集器,结果中有+号则使用这种收集器,否则有-号表示没有使用这个收集器。 并行: jinfo -flag UseParallelGC 13727jinfo -flag UseParallelOldGC 13727(fallback to 串行) 并发: jinfo -flag UseParNewGC 13727(fallback to 串行)jinfo -flag UseConcMarkSweepGC 137……

二分查找的扩展算法

二分查找已经是个家喻户晓的查找算法,并且得到了广泛的应用,大家都知道二分查找每次把一个排序的数组分成三个区间, [s, m)、 (m,e]、[m,m]三个区间,也就是取得中间的一个节点,前面一个区间,后面一个区间,中间节点是一个区间,然后对比中间节点是否是目标元素,如果不是,由于数组的有序性,可以舍弃一半的数据,因……

平均概率洗牌的问题

问题:具有100个数字的数组,需要实现洗牌,让每个数字均等概率放在每个位置上。 算法: 1. 第1次从100个数字中以均等概率随机的拿出一个放在第1个位置; 2. 第2次从剩下的99个数字中以均等概率随机拿出一个放在第2个位置; 3. 第3次从剩下的98个数字中以均等概率随机拿出一个放在第3个位置; ......... 99. ……

事物路由的方法

传统的事务都是通过Spring的声明式的事务来处理的,分库分表的时候,事务处理是个问题,在一个需要开启事务的方法上,需要动态的确定开启哪个数据库实例的事务,这个需要动态的确定,也就是在每个开启事务的方法调用前就必须确定开启哪个数据源的事务,实现原理参考如下帖子: http://itindex.net/detail/49026-spring-%E……

Proactor和reactor,水平触发和边缘触发

IO分类 同步阻塞 同步非阻塞 多路复用 基于信号的IO 异步IO Reactor 同步阻塞 同步非阻塞 多路复用 基于信号的IO Proactor 异步IO 水平触发 pool, select 边缘触发 epool Reactor和Proactor http://www.cnblogs.com/dawen/archive/2011/05/18/2050358.html 1、标准定义 两种I/O多路复用模式:Reactor和Proactor 一般地,I/……

两阶段提交协议、三阶段提交协议、四阶段提交协议

两阶段提交的协议大家都比较熟悉了,解释一下每个阶段的异常处理。首先,我们需要持久化协议过程中的状态,这样如果server宕机,那么恢复的时候还能通过日志知道宕机前处于那个阶段。同时,所有对数据的修改都会先写write ahead log,保证宕机重启的之后数据也不会丢失。写日志的顺序假定为:写write ahead log-修改缓冲区……