『图解Java并发编程系列』10张图告诉你Java并发多线程那些破事

目录

线程安全问题

活跃性问题

性能问题

有态度的总结

 

头发很多的程序员:『师父,这个批量处理接口太慢了,有什么办法可以优化?』

架构师:『试试使用多线程优化』

第二天

头发很多的程序员:『师父,我已经使用了多线程,为什么接口还变慢了?』

架构师:『去给我买杯咖啡,我写篇文章告诉你』

……吭哧吭哧买咖啡去了

在实际工作中,错误使用多线程非但不能提高效率还可能使程序崩溃。以在路上开车为例:

在一个单向行驶的道路上,每辆汽车都遵守交通规则,这时候整体通行是正常的。『单向车道』意味着『一个线程』,『多辆车』意味着『多个job任务』。

单线程顺利同行

单线程顺利同行

如果需要提升车辆的同行效率,一般的做法就是扩展车道,对应程序来说就是『加线程池』,增加线程数。这样在同一时间内,通行的车辆数远远大于单车道。

多线程顺利同行

多线程顺利同行

然而成年人的世界没有那么完美,车道一旦多起来『加塞』的场景就会越来越多,出现碰撞后也会影响整条马路的通行效率。这么一对比下来『多车道』确实可能比『单车道』要慢。

多线程故障

多线程故障

防止汽车频繁变道加塞可以采取在车道间增加『护栏』,那在程序的世界该怎么做呢?

程序世界中多线程遇到的问题归纳起来就是三类:『线程安全问题』『活跃性问题』『性能问题』,接下来会讲解这些问题,以及问题对应的解决手段。

线程安全问题

有时候我们会发现,明明在单线程环境中正常运行的代码,在多线程环境中可能会出现意料之外的结果,其实这就是大家常说的『线程不安全』。那到底什么是线程不安全呢?往下看。

原子性

举一个银行转账的例子,比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元,两个操作都成功才意味着一次转账最终成功。

  • 267
    点赞
  • 741
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值