利用Apache工具和Guava对ArrayList进行分页

概述之前写过一篇对ArrayList进行分页,介绍如何用JAVA API对ArrayList进行分页,下面再介绍另外两种方法。使用Apache工具使用Apache的ListUtils类,一行代码即可解决。import java.util.Arrays; import java.util.List;import org.apache.commons.collections4.ListUtils;imp...
阅读(505) 评论(2)

JAVA+信号量:阻塞线程

概述 为了提高接口的响应速度,可以使用ThreadPoolExecutor + Runnable 或者ThreadPoolExecutor 并发调用 技术来并行执行task。但是ThreadPoolExecutor有个特点,就是当core线程不足以应付请求的时候,会将task加入到队列中。一旦使用队列,那么就可能出现队列爆掉或者队列导致的内存溢出问题。为了尽快提供接口响应速度,但是又不想使用队列特性...
阅读(543) 评论(0)

ThreadPoolExecutor + Runnable

概述 在ThreadPoolExecutor 并发调用 一文中介绍了ThreadPoolExecutor + Callable的方法并行执行task,其实ThreadPoolExecutor还有另一种用法, ThreadPoolExecutor + Runnable。如果你不理会task执行的结果,可以使用这种方法。 代码 public class TestExecutorCountDown...
阅读(418) 评论(0)

利用ConcurrentHashMap和计数器实现锁

概述 在某些场景下,我们想让线程根据某些业务数据进行排队,简单代码如下:import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.co...
阅读(524) 评论(0)

ThreadPoolExecutor 并发调用

概述 通常为了提供任务的处理速度,会使用一些并发模型,ThreadPoolExecutor中的invokeAll便是一种。 代码 package test.current;import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable;...
阅读(865) 评论(0)

请求量稍微比较大-尽量避免长事务

概述 某些后台应用经常需要频繁的操作DB,为了保证数据出错时能回滚数据,通常都会使用事务。在使用事务的时候,尽量避免使用长事务,比如说:某个业务操作需要批量插入数据,而且数据量还不少,如果这整个操作都包在一个事务里面,只有等到数据操作完了,DB连接才会被释放,一旦外部系统发起请求,并发调用这个操作,那么一下子将有大量的DB连接被持有而没有被释放掉,这个时候,如果还有其他请求到来,就很大可能获取不到数...
阅读(827) 评论(0)

库存仓库和推荐仓库进行匹配简单算法

概述 通常在电商项目的库存项目中,每条库存记录都有一个对应的仓库字段,warehouse,同一个商品可能在多个仓库中都存在的。假设用户添加一个商品sku1到购物车中,这个sku1在warehouse1和warehouse2都存在,这个时候到底要扣减哪个仓库中的库存呢?这里有个仓库优先级的概念,一般来说,会有专门的系统来决定仓库扣减的优先级。假设这个专门的系统叫SystemB,我们只需要传入一个用户的...
阅读(462) 评论(0)

多个仓库库存释放-简单算法

概述在做电商项目的时候,会涉及到库存扣减的问题,稍微复杂的情况是,多仓库库存扣减,比如说: 仓库warehouse1有4件商品,warehouse2有3件商品,这个时候用户需要买7件商品,这样无论哪个仓库都不够扣减, 这种情况下,会使用多仓库库存扣减的逻辑,warehouse1和warehouse2两个仓库的库存之和是3+4=7,是足够扣减6件的。好了,当使用多仓扣减的时候,用户突然不想买6件了...
阅读(520) 评论(0)

多个仓库库存扣减-简单算法

概述在做电商项目的时候,会涉及到库存扣减的问题,稍微复杂的情况是,多仓库库存扣减,比如说: 仓库warehouse1有4件商品,warehouse2有3件商品,这个时候用户需要买7件商品,这样无论哪个仓库都不够扣减, 这种情况下,会使用多仓库库存扣减的逻辑,warehouse1和warehouse2两个仓库的库存之和是3+4=7,是足够扣减6件的。简单代码public class Stock {...
阅读(485) 评论(0)

偏向锁-学习

偏向锁介绍。...
阅读(361) 评论(2)

自旋锁-概念

不放弃CPU时间 线程获取不到锁,就会被阻塞挂起,等其他线程释放锁的时候,才被唤醒起来。线程挂起和唤醒是需要转入到内核态完成的,这些操作对系统的并发性能会带来影响。其实有时候线程虽然没法立刻获取到锁,但是也可能很快就会获取到锁。 能不能给多些机会让获取不到锁的线程在CPU里多待上一段时间,尝试去获取锁。因为线程对共享数据的锁定可能只是持续一小段时间而已,之后便会释放资源锁。 JVM采用了一种叫自...
阅读(364) 评论(2)

synchronized关键字加锁-线程可重入

synchronized加载加锁-线程可重入...
阅读(477) 评论(6)

JVM调优-学习篇

JVM调优学习。...
阅读(939) 评论(0)

Future模式学习

Future模式...
阅读(476) 评论(4)

生产者-消费者模式

概述 生产者-消费者模式在系统交互方面,有两个特点: 1、系统解耦 2、解决并发问题下面用几个简单例子逐步说明。 简单例子 假设有两个系统,A系统和B系统,B系统需要依赖A系统产生的数据,也就是说,A系统产生数据后,必须把数据扔给B系统。 这个时候,可以让B系统提供一个方法,比如说提供一个http接口sendData(),然后A系统直接调用即可。这种方案在流量不大的情况下,完全没问题的,但...
阅读(863) 评论(0)
45条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:318787次
    • 积分:3484
    • 等级:
    • 排名:第9907名
    • 原创:118篇
    • 转载:5篇
    • 译文:0篇
    • 评论:163条
    博客专栏