
并发编程
文章平均质量分 88
iteye_11714
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发浅析
之前做的项目里涉及到了一些并发问题,今天总结一下 并发是由对共享资源的访问不当引起的,总的来说,常见的共享资源分为两大类:一种是数据库表中的行记录;一种是代码中的共享变量(譬如单例或者静态类型等等)。下面对这两类共享资源引发的并发问题借助一些实际的例子进行阐述。 [color=blue][b]1.数据库表中的行记录共享[/b][/color] 此类资源共享导致并发问题的原因一般分为以...原创 2012-04-22 18:04:33 · 120 阅读 · 0 评论 -
闭锁/栅栏/信号量/FutureTask分析及使用
闭锁/栅栏/信号量/FutureTask分析及使用 1、闭锁 用途:可用于命令一组线程在同一个时刻开始执行某个任务,或者等待一组相关的操作结束。尤其适合计算并发执行某个任务的耗时。 public class CountDownLatchTest { public void timeTasks(int nThreads, final Runnable task) ...原创 2013-12-18 20:06:17 · 214 阅读 · 0 评论 -
ExecutorCompletionService分析及使用
ExecutorCompletionService分析及使用 当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直到每个future都已完成。如果我们不希望出现因为排在前面的任务阻塞导致后面先完成的任务的结果没有及时获取的情况,那...原创 2013-12-29 16:54:34 · 205 阅读 · 0 评论 -
自旋锁和缓存一致性
本文为原创,转载请注明出处 1、两种自旋锁的实现:TAS和TTAS 1.1 TAS class TasLock { AtomicBoolean state = new AtomicBoolean(false); void lock() { while (state.getAndSet(true)) { ...原创 2014-04-26 10:15:23 · 351 阅读 · 0 评论 -
CLH锁
本文为原创,转载请注明出处 1、为什么要引入CLH锁 在前一篇文章中,介绍了TAS、TTAS两种自旋锁。这两种锁的缺点是:任何一个处理器每一次对锁成功的访问(getAndSet(true)和set(false)任意一个方法的调用),都会将其他处理器的cache中的缓存失效掉。这样会导致以下后果: 其他处理器无法再采用局部自旋的方式对相同数据进行访问,后续的其他处理器对锁的...原创 2014-05-09 16:07:50 · 314 阅读 · 0 评论 -
MCS锁
1、 为什么要引入MCS锁? 在NUMA架构体系下,访问remote memory的速度要远远慢于访问local memory的速度。如下图所示(引自Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit): 在前一篇文章中分析了CLH算...2014-05-10 15:27:15 · 400 阅读 · 0 评论