第二次OO总结

多线程编程实践

 

写在前面

  在学习完成了面向对象的基本思想后,我们的面向对象课程进入了第二阶段的学习过程:多线程编程。多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以显著提高性能。多线程技术使程序的响应速度更快,当前没有进行处理的任务时可以将处理器时间让给其它任务。但是,多线程需要协调和管理,线程太多会导致控制太复杂,最终可能造成很多Bug。这三次的作业,就让我对多线程有了更加深刻地认识。


正文

第五次作业

总述

  这一次的作业是在前面两次作业的基础上,改变了电梯数量和实现方式,要求使用多线程来实现对电梯的调度,以及电梯对请求的响应。虽然在功能上没有什么改变,但是由于多线程的要求,在实现过程中我遇到了许多困难。

类图:

度量分析:

分析

  此次作业我在线程的run方法中写了太多的功能,导致程序执行起来非常缓慢。另外,由于没有对线程增加一些合适的同步控制方法,我的程序在运行起来有着很多的不确定性,经常会出现对同一测试用例,每次运行的结果都不相同。甚至,程序有时候会莫名的crash。这些都是因为自己没有对多线程做出很好的控制。

  这次作业我也被找出了五个bug。其中有一个是格式问题,由于自己正则表达式是对一行就行匹配处理,所以自己的程序对于一行有多条指令的情况时,没有过滤掉非法指令,只处理正确的指令。另外的几个bug都是因为多线程导致的不确定性,特别是执行顺序的不确定性导致对于同质请求的判断出现问题。

我的心得体会

  多线程虽然可以提高程序的执行效率,但是编写多线程程序的难度远远大于单一线程的程序。这次作业,更是让我深刻体会到了多线程的玄学之处。还有最重要的是,多线程程序在寻找修改bug的时候非常困难,一般的调试方法是行不通的。

第六次作业

总述

  这次作业是让我们体会多线程安全的处理方法,如何才能写出线程安全的类,使得程序的运行结果确定可控,是这次作业的重点。本次作业的目标是训练同学们针对线程安全问题,如何平衡线程访问控制和共享对象之间的矛盾。作业内容是实现一个监控程序,针对给定监控范围内的监控对象,以扫描方式探查监控对象相关属性的变化,从而触发规定的处理动作。

类图:

度量分析:

  从上面可以看出,对监控范围的扫描在很大程度上影响了程序的效率。

作业分析

  这次作业的难度,笔者个人认为是比上一次作业简单的,可能是因为我们学习了如何去控制线程的安全。此次作业,主要就是要建立一个线程安全的safefile类,确保在对文件进行操作的时候,不进行扫描。以及对于监控范围建立快照,确定扫描周期,使得可以按照一定频率去进行扫描,对比前后两次的快照,从而检测到文件的变化。

  这次作业主要出现的问题就是recover操作带来的影响,也就是recover操作可能会让其它线程也检测到变化,从而得到不必要的响应。作业也必须确定合适的扫描周期,从而可以实现对较大深度和较大广度目录的检测。

心得体会

  这次作业总的来说,实现的功能较为简单,只要你能够构件号线程安全的类,并且控制好扫描频率,就可以很好的完成这次作业。另外,这次作业也让我对java的文件操作更加熟悉。对于线程的控制更加得心应手。

第七次作业

总述

  第七次作业主要考察的是我们的设计风格,以及程序的编写规范,培养我们对于程序的规范性认识。作业要求我们模拟出租车的乘客呼叫与应答系统,设置100辆出租车,对于乘客的请求进行处理。这次作业也拥有至少100个线程,如果没有很好的设计,程序执行起来会显得效率十分低下。通过对这次作业的完成,我明白了从初始就构造一个好的设计尤为重要。

类图:

度量分析

作业分析

  通过上面的度量分析可以看出,我的window类的复杂的较高,原因就在于,我把判断调度出租车的方法全部写到了这个类当中。这次作业总的来说难度不大,就是为了考察我们的设计方法以及代码规范。通过对需求分析文档的编写,我在开始编写代码之前,就有了明确的任务和思路。另外,由于那12项设计原则的限制,我这次作业的代码层析更加清晰,各个类分工很明确,代码的可读性、可移植性也很高。


感悟

  经过四次课程的学习和三次作业的磨练,我对于多线程编程思想有了初步的了解,明白了如何去编写线程安全的程序,还懂得了许多设计规则,让我对面向对象编程思想的理解也更加深刻。我非常期待接下来的学习。

转载于:https://www.cnblogs.com/jy0205/p/8980748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值