产生更多的交替操作
由于并发代码中发生的错误一般都是低概率事件,所以...
分类:
编程语言 时间:
2014-09-18 23:48:24
阅读次数:
260
资源管理的测试
先摆上昨天测试用的栗子
import java.util.concurrent.Semaphore;
public class BoundedBuffer {
private final Semaphore availableItems, availableSpaces;
private final E[] Items;
private int putPosition...
分类:
编程语言 时间:
2014-09-15 17:46:19
阅读次数:
261
避免热点域
比如一个hashmap的size。优化的方法就是加一个计数器。但是对于ConcurrentHashMap来说。当并发的对其进行操作时,每次put和remove都需要改变这个计数器。所以在这个类里这个计数器就被叫做热点域,是可伸缩性的瓶颈。所以这里采取避免热点域的方法是对于应用锁分段的散列桶,ConcurrentHashMap中的size将对每个分段进行枚举并将每个分段的元素数量相加。...
分类:
编程语言 时间:
2014-09-13 09:24:34
阅读次数:
231
阻塞
非竞争的同步可以完全在JVM中处理,竞争的同步则可能需要操作系统的介入,从而增加开销。当在锁上发生竞争时,竞争失败的线程肯定会阻塞。JVM在实现阻塞行为时,可以采用自旋等待,就是通过循环不断的尝试获取锁。直到成功。或者通过操作系统挂起被阻塞的线程。这两种方式的效率高低取决于上下文切换的开销以及在成功获取锁之前需要等待的时间。如果等待时间较短,采用自旋等待的方式,如果时间较长,则采用操作系统...
分类:
编程语言 时间:
2014-09-10 22:30:41
阅读次数:
230
动态的锁顺序死锁
在协作对象之间发生的死锁
死锁的避免与诊断
支持定时的锁
通过线程转储信息来分析死锁
其它活跃性危险
饥饿
糟糕的响应性
活锁...
分类:
编程语言 时间:
2014-09-09 13:13:08
阅读次数:
225
为什么GUI是单线程的
避免活跃性危险
死锁
线顺序死锁
动态的锁顺序死锁...
分类:
编程语言 时间:
2014-09-07 23:50:06
阅读次数:
421
线程工厂
在调用构造函数后再定制ThreadPoolExecutor
扩展ThreadPoolExecutor
递归算法的并行化...
分类:
编程语言 时间:
2014-09-07 22:30:15
阅读次数:
328
保证并发安全性的方式有三:·不共享·不可变·同步前两种方式相对第三种要简单一些。这一篇不说语言特性和API提供的相关同步机制,主要记录一下关于共享的一些思考。共享(shared),可以简单地认为多个线程可以同时访问某个对象。如果仅仅在单线程内进行访问则不存在同步的问题..
分类:
编程语言 时间:
2014-09-07 03:25:15
阅读次数:
292