20175212童皓桢 《Java程序设计》第十周学习总结

学号 2016-2017-2 《Java程序设计》第X周学习总结

教材学习内容总结

一、Java中的线程的状态

建的线程在它的一个完整的生命周期中通常要经历如下的四种状态:

1.新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。

2.运行 :线程必须调用start()方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新一个线程排队等候切换了。一旦轮到它来享用CPU资源时,此线程的就可以脱离创建它的主线程独立开始自己的生命周期了。

3.中断:有4种原因的中断:

JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。

线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状。

线程使用CPU资源期间,执行了wait()方法。

线程使用CPU资源期间,执行某个操作进入阻塞状态。

4.死亡 :处于死亡状态的线程不具有继续运行的能力。线程释放了实体

二、 Thread类与线程的创建

使用Thread创建线程通常使用的构造方法是:

Thread(Runnable target)

在创建线程对象时必须向构造方法的参数传递一个实现Runnable接口类的实例,该实例对象称作所创线程的目标对象,当线程调用start()方法后,一旦轮到它来享用CPU资源,目标对象就会自动调用接口中的run()方法(接口回调)。

三、线程常用方法

1.start() : 线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命周期了。

2.run(): Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法。

3.sleep(int millsecond): 优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间。

4.isAlive(): 线程处于“新建”状态时,线程调用isAlive()方法返回false。在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true。

5.currentThread():该方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程。

6.interrupt() :一个占有CPU资源的线程可以让休眠的线程调用

四、 线程同步

在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理。

在处理线程同步时,要做的第一件事就是要把修改数据的方法用关键字synchronized来修饰。

所谓线程同步就是若干个线程都需要使用一个synchronized修饰的方法。

五、 线程联合

一个线程A在占有CPU资源期间,可以让其它线程调用join()和本线程联合,如:
B.join();

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

教材学习有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,如果别人没有提出相同问题,可以编辑文档添加,然后把自己提出的问题复制到下面:

  • 问题1:实作Runnablerun()中定义额外流程好?还是继承Threadrun()中定义额外流程好?
  • 问题1解决方案:实作Runnable接口的好处就是较有弹性,你的类别还有机会继承其它类别

若继承了Thread,那该类别就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来实作

如果主线程中启动了额外线程,预设会等待被启动的所有线程都执行完run()方法才中止JVM。

如果一个Thread被标示为Daemon线程,在所有的非Daemon线程都结束时,JVM自动就会终止。

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

代码托管

输入图片说明

上周考试错题总结

  • 下列关于HashMap泛型类常用方法的介绍,正确的是

A .public boolean isEmpty()如果此映射不包含键-值映射关系,则返回 true。

B .public V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则抛出异常。

C .public V put(K key, V value) 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则以先定义的值为准。

D .public Object clone()返回此 HashMap 实例的浅表副本:并不复制键和值本身。

解析:查询API。B项:如果此映射不包含该键的映射关系,则返回null。C项:如果该映射以前包含了一个该键的映射关系,则旧值被替换。

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

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

xxx
xxx

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 6/6 1/1 20/20
第二周 245/251 1/2 18/38
第三周 633/884 1/3 22/60
第四周 305/1189 1/4 30/90
第五周 410/1599 3/7 30/120
第六周 1135/2734 3/10 30/150
第七周 781/3515 3/13 30/180
第八周 710/4225 3/16 30/210
第九周 775/5000 2/18 30/240
第十周 933/5933 1/19 30/270

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/thz666/p/10815420.html