juc-02-评价标准

多线程-评价标准

安全性(必备条件):不损坏对象

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

如果一个类即使被多个线程同时使用,也可确保安全性,那么这个类就称为线程安全(thread-safe)类。由于类库中还存在非线程安全的类,所有在多线程的程序中
需要特别注意。比如:java.util.Vector类是线程安全的类,而java.util.ArrayList则是非线程安全的类。

  • 线程安全和线程兼容:虽然ArrayList是非线程安全的,当通过执行适当的互斥处理,也可用安全使用。
  • synchronized和线程安全:某个线程是线程安全的还是非线程安全的,与这个类的方法是否synchronized方法无关。

生存性(必备条件):必要的处理能够被执行

生存性(liveness)是无论是什么时候,必要的处理都一定能够被执行。

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

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

可复用性(提升质量): 类可重复利用

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

编写多线程的时候如果能够巧妙地将线程的互斥机制和方针隐藏到类中,那这就是一个可复用性高的程序。

性能(提升质量): 快速,大批量地执行处理

  • 吞吐量:单位时间内完成的处理数量。能完成的处理越多,则吞吐量越大。
  • 响应性(等待时间):从发出请求到收到响应的时间。
  • 容量:可同时进行的处理数量

其他

  • 效率:
  • 可伸缩性:
  • 降级:
作者

Mozss

发布于

2020-01-19

许可协议

评论