快捷搜索:  汽车  科技

java并发编程与解析(并发编程很难看这个就够了)

java并发编程与解析(并发编程很难看这个就够了)并发编程的优缺点其实我更想说,问那么多干嘛,直接学就对了。这是必须的,很多的场景和业务都要用到,撸起袖子就是干!对于并发编程有着以下误解和正解最常见的对并发编程的误解有以下这些:下面的这些说法才是对并发客观的认识:

前言:

为什么要学JAVA并发编程?

首先我们知道要编写出优质的并发代码是一件很难很难的事,Java对多线程的支持从第一个版本就开始了,这一点在那个年代看来是很不得了的一件事情,但是当我们逐渐的认识到了并发编程,对他有了更加深刻的认识以及付出更多实践的时候,再去实现并发编程就会拥有更好的方案和选择了。

那么为什么需要并发呢

并发我们可以看成是为了解耦和而存在的策略,它帮助我们把做什么(目标)和什么时候做(时机)分开。这样做的好处是显而易见的,明显的改善了程序的吞吐量(获得更多的CPU调度时间)和结构(程序有多个部分在协同工作)。凡是做过Java Web开发工作的程序员都知道,Java Web中的Servlet程序在Servlet容器的支持下采用单实例多线程的工作模式,Servlet容器为你处理了并发问题。

对于并发编程有着以下误解和正解

最常见的对并发编程的误解有以下这些:

  • -并发总能改进性能(并发在CPU有很多空闲时间时能明显改进程序的性能,但当线程数量较多的时候,线程间频繁的调度切换反而会让系统的性能下降)
  • -编写并发程序无需修改原有的设计(目的与时机的解耦往往会对系统结构产生巨大的影响)
  • -在使用Web或EJB容器时不用关注并发问题(只有了解了容器在做什么,才能更好的使用容器)

下面的这些说法才是对并发客观的认识:

  • -编写并发程序会在代码上增加额外的开销
  • -正确的并发是非常复杂的,即使对于很简单的问题
  • -并发中的缺陷因为不易重现也不容易被发现
  • -并发往往需要对设计策略从根本上进行修改

其实我更想说,问那么多干嘛,直接学就对了。这是必须的,很多的场景和业务都要用到,撸起袖子就是干!

java并发编程与解析(并发编程很难看这个就够了)(1)

并发编程的优缺点

使用并发的原因

  • 多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升
  • 在特殊的业务场景下先天的就适合于并发编程。 比如在图像处理领域,一张1024X768像素的图片,包含达到78万6千多个像素。即时将所有的像素遍历一边都需要很长的时间, 面对如此复杂的计算量就需要充分利用多核的计算的能力。又比如当我们在网上购物时,为了提升响应速度,需要拆分,减库存, 生成订单等等这些操作,就可以进行拆分利用多线程的技术完成。 面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分

并发编程的缺点

频繁的上下文切换

时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。 而每次切换时,需要保存当前的状态起来,以便能够进行恢复先前状态,而这个切换时非常损耗性能, 过于频繁反而无法发挥出多线程编程的优势。 通常减少上下文切换可以采用无锁并发编程CAS算法使用最少的线程使用协程

  • 无锁并发编程:可以参照concurrentHashMap锁分段的思想,不同的线程处理不同段的数据, 这样在多线程竞争的条件下,可以减少上下文切换的时间
  • CAS算法,利用Atomic下使用CAS算法来更新数据,使用了乐观锁,可以有效的减少一部分不必要的锁竞争带来的上下文切换
  • 使用最少线程:避免创建不需要的线程,比如任务很少,但是创建了很多的线程,这样会造成大量的线程都处于等待状态
  • 协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换

由于上下文切换也是个相对比较耗时的操作,所以在《Java并发编程的艺术》一书中有过一个实验,并发累加未必会比串行累加速度要快。 可以使用Lmbench3测量上下文切换的时长,vmstat测量上下文切换次数

线程安全

多线程编程中最难以把握的就是临界区线程安全问题,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用。

并发编程很难?看这个就够了 十年JAVA老司机倾心整理

关于并发编程相关的知识点还有很多,无法在一篇文章跟大家阐述清楚

今天给大家分享的是:Java高并发编程详解 PDF

领取方式:关注我之后私信【架构资料】即可免费获取啦!

java并发编程与解析(并发编程很难看这个就够了)(2)

java并发编程与解析(并发编程很难看这个就够了)(3)

资料目录

java并发编程与解析(并发编程很难看这个就够了)(4)

资料目录

领取方式:关注我之后私信【架构资料】即可免费获取啦!

如果对您有帮助的话,别忘记帮我转发收藏一下,谢谢!

猜您喜欢: