定性不会影响程序的可再现性。但就像电梯中的请求队列、IFTTT中的文件信息、出租车系统的请求和出租车信息,每个线程间难以避免地会有共享的数据,此时就需要通过同步、互斥的手段防止JVM调度的不确定性破坏程序的可再现性。通常,通过锁机制就能够实现这些功能。但是,在共享关系比较复杂的情况下,单纯的使用锁机制并不一定能够达到预期的效果。这时就需要一种模式化的线程安全保护措施。那就是线程安全类。编写线程安全类就好比为已有的功能代码加上一层外皮,其内部代码保证功能的实现,外部接口保证入口的互斥,从而实现线程安全。但这又带来了另一个问题:同步部分的代码长度对多线程效率的影响。进而对于临界区的功能安排应当尽量精简,以避免对多线程机制的浪费。
此外,经过了对面向对象思想的学习,我认识到了面向对象程序设计的12大基本原则,并且将其实践到最近的一次作业当中。在亲自编写代码的过程中,我体会到这些原则最核心的想法就是:设计具有层次性、代码具有可延展性。在设计时就要从最外层的交互设计,一层层深入,到内部对象的建模、对象间交互,再到类内部的设计。这个设计就是对整个环境与系统的逐层深入,将各个功能逐层分离,最终形成类似树状的类设计。而在编写代码的时候不应当仅关注于当前的功能实现,更应当想到更多同类型的操作。换句话说就是编写出的方法、类不应当进能够实现特例操作,而更应当面向更为抽象、更为通用的层次上。
|