java并发编程实践 2.5 活跃度与性能

缘起

《java并发编程实践》 2.5 小节

分析

上一节说到,锁的本质是串行化. 它和现在提出的高性能,高并发是矛盾的. 所以势必要找平衡点.

例如一个servlet的处理请求的方法整体加上了synchronized,则因为servlet在servlet容器中是单实例的,导致此servlet处理web请求是串行化的. 即处理完客户端A的请求之后才能处理客户端B的请求. 这样web站点的这个servlet提供的功能就是并发性很弱的. 用户体验很差的.

那么怎么改善呢? 要么就是无状态, 则无任何线程安全问题,要么如果无论如何都涉及线程安全问题的操作,则尽量控制synchronized锁住的代码范围尽量的小.

最后说一下,串行化导致的不仅仅是性能低下,而且性能低下的直接后果就是活跃度失败问题——有些线程可能饥饿. 所以耗时的CPU计算和IO期间最好不要占用锁.