结束语

作者: 程序员札记 | 来源:发表于2022-05-07 07:43 被阅读0次

终于到了尾声的阶段。同事们坚持下来听也是非常不容易的。理解了并发能够增强自己对代码的认识。编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更好的选择。

为什么需要并发

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

误解和正解

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

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

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

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

并发编程的原则和技巧

  • 单一职责原则
    分离并发相关代码和其他代码(并发相关代码有自己的开发、修改和调优生命周期)。
  • 限制数据作用域
    两个线程修改共享对象的同一字段时可能会相互干扰,导致不可预期的行为,解决方案之一是构造临界区,但是必须限制临界区的数量。
  • 使用数据副本
    数据副本是避免共享数据的好方法,复制出来的对象只是以只读的方式对待。Java 5的java.util.concurrent包中增加一个名为CopyOnWriteArrayList的类,它是List接口的子类型,所以你可以认为它是ArrayList的线程安全的版本,它使用了写时复制的方式创建数据副本进行操作来避免对共享数据并发访问而引发的问题。
  • 线程应尽可能独立
    让线程存在于自己的世界中,不与其他线程共享数据。有过Java Web开发经验的人都知道,Servlet就是以单实例多线程的方式工作,和每个请求相关的数据都是通过Servlet子类的service方法(或者是doGet或doPost方法)的参数传入的。只要Servlet中的代码只使用局部变量,Servlet就不会导致同步问题。Spring MVC的控制器也是这么做的,从请求中获得的对象都是以方法的参数传入而不是作为类的成员,很明显Struts 2的做法就正好相反,因此Struts 2中作为控制器的Action类都是每个请求对应一个实例。

相关文章

  • 题目

    正文 结束语

  • 那天她究竟说了些什么?来,让我们来做拼图⑼a~~~

    十六、结束语 这是78分钟《大学问八讲》里结束语的段落: 这是21分钟《大学问》里结束语的段落: 讲座结束之前,龙...

  • 闲话

    最后结束语是我。

  • 2021-06-06

    讯飞笔记:开场活动、导语和结束语

  • 微信过关群结束语致辞:

    微信过关群结束语:微信过关群结束语: 从学校到家里,从班主任工作到幕后协助,有太多感谢、感动在心头!...

  • 【深圳】智狼邦演讲口才:演讲的结尾方式,这些tips你必须懂!

    结束语的功能 演讲的结束语如同开场白那样,也具有特定的功能:(1)预先提醒听众演讲即将结束;(2)加深听众对中心思...

  • 结束语

    男:幸福的时光总是太短暂,美好的记忆总是让人留恋 女:让我们的歌声在这里停留,让我们的笑容在这里化为永恒 师:同学...

  • 结束语

    奔跑的人会失去也会得到; 慢走的人会失去也会得到; 爬行的人会失去也会得到。 人怎么能比人!能活着,能拥有一颗真挚...

  • 结束语

    你断然是黑夜 不过趁着微弱的星光 趁着我的感激 将黑暗永久定格

  • 结束语

    文/马小杰 随着年龄的增长,我愈来愈觉得,与其好高骛远,关注那些远在天边,过去现在将来都不与自己交集的大人...

网友评论

      本文标题:结束语

      本文链接:https://www.haomeiwen.com/subject/qguturtx.html