JAVA并发编程的艺术---第一章:并发编程的挑战

1.1上下文切换
从人物保存到再加载的过程就是一次上下文切换
1.1.1 多线程一定快吗
答案是不一定的,当并发执行累加操作不查过百万次时,速度会比串行执行累加操作要慢。
为什么并发执行速度会比串行慢?这是因为线程有创建和上下文切换的开销。

可是使用Lmbench3测试上下文切换的时长。
使用vmstat可以测量上下文切换的次数。
1.1.3如何减少上下文切换
无锁并发编程
CAS算法
使用最少线程
协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。
1.1.4减少上下文切换实战
通过减少线上大量WAITING的线程,来减少上下文切换的次数。
第一步:使用jstack命令dump线程信息,
第二步:统计所有线程处于什么状态
第三步:打开dump文件查看处于WAITING的线程在做什么,发现大多数线程都处于等待状态。
第四步:减少JBOSS的工作线程数,找到JBOSS的线程池配置信息,将maxThread降到100.
第五步:重启JBOSS,在dump线程信息,然后统计WAITING的线程。

1.2死锁
避免死锁的几个方法:
(1)避免一个线程同时获取多个锁
(2)避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
(3)尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。
(4)对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

1.3资源限制的挑战
(1)资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件或者计算机软件资源。
(2)资源限制引发的问题
将串行改成并行,但是由于受到资源限制,仍然在串行执行,这个时候不仅不会加快执行,反而会更慢,因为增加了上下文的切换。
(3)如何解决资源限制的问题
硬件资源限制,可以考虑使用集群并行执行程序。
软件资源限制,可以考虑使用资源池将资源复用。
(4)在资源限制的情况下进行并发编程
根据不同的资源限制调整程序的并发度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值