Java 多线程程序的评价标准

作者:HaigLee
https://www.jianshu.com/u/67ec21fb270d
本文由 HaigLee 发布。未经许可,禁止转载。

一个程序的好与坏需要有一个评判标准,那这个标准是什么呢?下面我们来探讨一下这个问题:

安全性——不损坏对象

所谓安全性(safety)就是不损坏对象。这是程序运行的必要条件之一。

对象的损坏只是一种比喻,实际上,对象是存储上的一种虚拟事物,并不会实际损坏。对象损坏是指对象的状态和设计者的原意不一致,通常指对象的值并非预期的值。

如果一个类即使被多个线程同时使用,也可以确保安全性,那么这个类就称为线程安全(thread-safe)类。由于类库中还存在着非线程安全的类,所以在多线程程序中使用类时一定要特别注意。例如:java.until.Vector类就是线程安全的类,而java.until.ArrayList则是非线程安全的类。一般在API文档中能够查到各个类是否是线程安全的。

生存性——必要的处理能够被执行

生存性(liveness)是指无论在什么时候,必要的处理都一定能够被执行。这也是程序正常运行的必要条件之一。

即使对象没有损坏,也不代表程序就一定好。极端一点说,假如程序在运行过程中突然停止了,这时候,由于处理已经停止,对象的状态就不会发生变化了,所以对象的状态也就不会异常。这虽然符合前面讲的安全性的条件,但无法运行的程序根本没有任何意义。无论是什么时候,必要的处理一定能够被执行——这就是生存性。

有时候,安全性和生存性会互相制约。最典型的示例就是死锁(deadlock),即多个线程互相等待对方释放锁的情形。

可复用性——类可以复制利用

可复用性(reusability)是指类能够复制利用。这虽然不是程序正常运行的必要条件,但却是提高程序质量的必要条件。

类如果能够作为组件从正常运行的软件中分割出来,那么就说明这个类有很高的可复用性。

在编写多线程程序时,如果能够巧妙的将线程的互斥机制和方针隐藏到类中,那这就是一个可复用性高的程序。java.util.concurrent包中就提供了便于多线程编程的可复用性高的程序。

性能——整快速、大批量地执行处理

性能(performance)是指能快速、大批量的执行处理。这也不是程序正常运行的必要条件,但却是提高程序质量时应该考虑的条件。

影响性能的因素有好多种。下面是从Doug Lea 的性能分类中摘录出的主要部分。

  • 吞吐量(throughput):是指单位时间内完成的处理数量。能够完成的处理越多,则表示吞吐量越大。

  • 响应性(responsiveness):是指从发出请求到收到响应的时间。时间越短,响应性也就越好。在GUI程序中,相比于到处理“结束”时的时间,到处理“开始”时的时间更为重要。前者是指实际处理所花费的时间,而后者是到程序开始响应用户所花费的时间。相比于按下按钮后无任何反应,10秒后才提示“处理完毕”这种方式,在按下按钮时应立刻提示“处理开始”这种方式的响应性更高,即便是到处理结束花费的时间多一点也没有任何关系。响应性好也称为等待时间(latency)短。

  • 容量(capacity):是指可同时进行的处理数量。例如服务器能同时处理的客户端数或文件数等。

其它的诸如效率(efficiency)、可伸缩性(scalability)、降级(degradation)等,也可作为性能的评价标准。

有时候,这些要素之间是互相制约的。例如,如果要提高吞吐量,那么在很多情况下,程序的响应性就会下降。如果要提高安全性,那么性能就有可能会下降(如吞吐量变小)。

总结

安全性和生存性是必须遵守的标准。在此基础上,考虑如何提高可复用性和性能。

作者:HaigLee
https://www.jianshu.com/u/67ec21fb270d
本文由 HaigLee 发布。未经许可,禁止转载。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:虽然自己平时都在用多线程,也能完成基本的工作需求,但总觉得,还是对线程没有一个系统的概念,所以,查阅了一些资...
    justCode_阅读 4,005评论 0 9
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 6,409评论 0 8
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 3,865评论 0 4
  • 回忆篇第1章、噩耗 人间正属四月芳菲,落英缤纷时节,转眼千年,感叹世间物是人非,曾经的蛮荒禁地,成了仙凡两界修仙人...
    灵舞阅读 1,657评论 0 0
  • 考研与工作,这是一个历史遗留问题;人生命短,用Python也解不开的谜团。不幸的是我只能选择其一,也必须选择其一;...
    IWillGo阅读 3,671评论 2 2