博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《程序设计与数据结构》第6周学习总结
阅读量:5068 次
发布时间:2019-06-12

本文共 2990 字,大约阅读时间需要 9 分钟。

20162308 2016-2017-2 《程序设计与数据结构》第6周学习总结

教材学习内容总结

  1. 类的继承
  2. 代码复用
  3. 抽象类 abstract
  4. 方法重载 Override
  5. 多线程 Multi-Threading

教材学习中的问题和解决过程

  • 1 关于多重继承
  • 一致认为,在面对对象中添加多重继承的特性对程序员来说,至少是像我这样没什么经验的初学者来说,是一件非常困难的事。继承应该是一种"is-a"的逻辑,那么多重继承在这个角度上来说就是不合逻辑的。所以,万幸,Java没有在设计的时候引入这个特性。
  • 2 线程、进程 (Thread & Process)
  • 阅读材料:
    《Java编程思想》
  • 去年,好想也是四月初的时候,当时我在杭电面试,当时说到了自己设计的爬虫中实现了 Producer- Consumer 的多线程模型,然后那几个老师就问我线程和进程有什么区别。那个时候,我自己其实也搞不懂线程和进程有什么区别,我就瞎扯了几句。回去以后,自己查了一些资料,也对进程和线程有了一些理解。进程是CPU资源分配的最小单位,线程是依附于进程而存在的调度,一个进程中可以存在多个线程。

    利用对象,可将一个程序分割成相互独立的区域。我们通常也需要将一个程序转换成多个独立运行的子任务。像这样的每个子任务都叫作一个“线程”(Thread)。编写程序时,可将每个线程都想象成独立运行,而且都有自己的专用CPU。一些基础机制实际会为我们自动分割CPU的时间。我们通常不必关心这些细节问题,所以多线程的代码编写是相当简便的。 这时理解一些定义对以后的学习狠有帮助。“进程”是指一种“自包容”的运行程序,有自己的地址空间。 “多任务”操作系统能同时运行多个进程(程序)——但实际是由于CPU分时机制的作用,使每个进程都能 循环获得自己的CPU时间片。但由于轮换速度非常快,使得所有程序好象是在“同时”运行一样。“线程” 是进程内部单一的一个顺序控制流。因此,一个进程可能容纳了多个同时执行的线程。 多线程的应用范围很广。但在一般情况下,程序的一些部分同特定的事件或资源联系在一起,同时又不想为 它而暂停程序其他部分的执行。这样一来,就可考虑创建一个线程,令其与那个事件或资源关联到一起,并让它独立于主程序运行。一个很好的例子便是“Quit”或“退出”按钮——我们并不希望在程序的每一部分代码中都轮询这个按钮,同时又希望该按钮能及时地作出响应(使程序看起来似乎经常都在轮询它)。 ——《Think in Java》

//example: using class Thread//SimpleThread.javapublic class SimpleThread extends Thread{    private int countDown = 5;    private static int threadCount = 0;    private int threadNumber = ++threadCount;    public SimpleThread(){        System.out.println("Making" + threadNumber);    }    public void run(){        while(true){            System.out.println("Thread " + threadNumber + "(" + countDown + ")");            if(--countDown == 0)return;        }    }    public static void main(String[] args) {        for(int i = 0; i < 5; i++)new SimpleThread().start();        System.out.println("All Threads Started");    }}
//example: using interface Runable//SimpleRunable.javaclass MyRunable implements Runnable{    private String name;    MyRunable(String name){        this.name = name;    }    @Override    public void run() {        try {            Thread.sleep(1000);            System.out.println(name + "+1s");            Thread.sleep(1000);            System.out.println(name + "+2s");        } catch (Exception e) {            System.out.println("Against Basic Law");        }    }}public class SimpleRunable{    public static void main(String[] args) {        MyRunable mr1 = new MyRunable("T1");        MyRunable mr2 = new MyRunable("T2");        Thread t1 = new Thread(mr1);        Thread t2 = new Thread(mr2);        t1.start();        t2.start();    }}

代码调试中的问题和解决过程

  • 多线程的程序运行时运行太快,不能观察到顺序。
  • 使用Thread.sleep(Math.Random() * 1000)来减慢速度。

  • 代码提交过程 & 代码量截图:
  • 2017-04-07 (2).png

上周考试错题总结

没有考试

结对及互评

注意学习方法,书上的代码关键是理解,理解了再根据书上的思路,自己敲一遍。

其他(感悟、思考等,可选)

  • 关于代码复用
  • 代码复用是一件能够很大的提高生产力的工作,通过梳理程序的逻辑结构,建立清晰合理的面对对象模型,实现接口或继承抽象类,来实现需求。也就是说,不要重复造轮子。利用已有的代码,应用到当前的需求中,提高效率。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 26/26 1/1 7/7
第二周 81/107 1/2 8/15 String类型的使用
第三周 80/187 1/3 5/20 位运算
第四周 300/487 1/4 8/28 动态数组和迭代器
第五周 132/619 1/5 18/46 OOP编程导论
第六周 90/709 1/6 5/51 多线程
  • 计划学习时间:5小时

  • 实际学习时间:8小时

参考资料

转载于:https://www.cnblogs.com/pingch/p/6682414.html

你可能感兴趣的文章
java对象的深浅克隆
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
Python 3.X 练习集100题 05
查看>>
设计器 和后台代码的转换 快捷键
查看>>
Monkey测试结果分析
查看>>
STL——配接器、常用算法使用
查看>>
STL容器之vector
查看>>
无法向会话状态服务器发出会话状态请求
查看>>
数据中心虚拟化技术
查看>>
01入门
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>