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 发布。未经许可,禁止转载。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

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