在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。synchronized同步块大家都比较熟悉,...
分类:
其他好文 时间:
2014-09-18 23:28:14
阅读次数:
333
资源管理的测试
先摆上昨天测试用的栗子
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
线程工厂
在调用构造函数后再定制ThreadPoolExecutor
扩展ThreadPoolExecutor
递归算法的并行化...
分类:
编程语言 时间:
2014-09-07 22:30:15
阅读次数:
328
设置线程池的大小
配置ThreadPoolExecutor
管理队列任务
饱和策略...
分类:
编程语言 时间:
2014-09-06 22:33:34
阅读次数:
353
volatile既然不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它保证共享数据同一时刻只能被一条线程使用,其他线程只有等到锁释放后才能重新进行竞争。对于java开发人员,我们最熟悉的肯定就是用synchronized关键词完成锁功能,在涉及到多线程并发时,对于一些变量,你应该会毫不犹豫地加上synchronized去保证变...
分类:
其他好文 时间:
2014-09-05 19:58:11
阅读次数:
204